Mảng đa chiều động trong PHP

Mảng đa chiều PHP còn được gọi là mảng của mảng. Nó cho phép bạn lưu trữ dữ liệu dạng bảng trong một mảng. Mảng đa chiều PHP có thể được biểu diễn dưới dạng ma trận được biểu diễn bằng hàng * cột

Sự định nghĩa

Ví dụ mảng đa chiều PHP

Hãy xem một ví dụ đơn giản về mảng đa chiều PHP để hiển thị dữ liệu dạng bảng sau. Trong ví dụ này, chúng tôi đang hiển thị 3 hàng và 3 cột

Chúng tôi biết cách truy cập các mục mảng PHP. Nếu chúng ta biết số lượng khóa và tên của khóa, chúng ta có thể đặt giá trị cho một mục mảng nhiều chiều
Ví dụ. $arr[‘a’][‘b’][‘c’] = ‘giá trị của tôi’
Các khóa mảng có thể được lưu trữ trong biến
Ví dụ

$key1 = 'a'; $key2 = 'b'; $key3 = 'c';
$arr[$key1][$key2][$key3] = 'my value';


Trong ví dụ này, các khóa mảng của chúng ta đã biết. Và nó rất dễ dàng để viết mã. Nhưng vấn đề là khi các khóa của chúng tôi có thể thay đổi và bạn không biết chúng có bao nhiêu khóa, thì chúng tôi không thể viết một dòng mã nào để truy cập mục đó. Nếu tôi cung cấp cho bạn các khóa mảng trong một mảng trong đó một khóa là cha của khóa tiếp theo thì bạn viết mã như thế nào
Ví dụ. tôi có một mảng

$arr = array(
    'a' => array(
        'b' => array(
            'c'=>100,
        )
    ),
    'x' => array(),
);


Và danh sách khóa theo trình tự

$keys = array('a', 'b','c');


Mục tiêu là thay đổi giá trị 100 thành giá trị mới 500. Bạn phải viết một mã tương đương với mã sau

$arr['a']['b']['c'] = '500';


Tôi không biết bất kỳ cú pháp PHP nào để làm điều này. Bạn có thể thử sử dụng quy tắc biến biến PHP. Nhưng điều đó sẽ không làm việc
Tôi đã viết một chức năng để giải quyết vấn đề

/**
 * Insert new item to a multidimensional array where sequence of keys are stored in an array.
 * @param array() $arr . Array where the value will be inserted. This array can be empty.
 * @param array() $key_chain. Array of keys where a key is the parent of the next key. Keys can be number, string or event BLANK string.
 * @param mixed $value. The value that you want to insert to the array.
 * @return bool. True for success and false for fail.
 */
function insert_into_array_by_key_chain(&$arr, $key_chain, $value )
{
    if( !is_array( $key_chain ) || count( $key_chain ) == 0 ){ return false; }
 
    $ref = &$arr;//take the reference of the array.
    foreach( $key_chain as $key )
    {
        $key = trim( $key );
        if( $key == '')
        {
            $ref[] = array();        //Just a fake value. This will be overridden on next cycle or after the loop. This fake value must be an array to avoid error for next valid non blank key.
            end($ref);               //set the internal pointer of array to the last item.
            $ref = &$ref[key($ref)]; //take the reference of the last inserted fake item. Function key() returns the key of current item of the array. In this case it is last item.
        }
        else
        {
            $ref = &$ref[$key];     //take the new reference of the item of child array based on the key from the current reference.
        }
 
    }
    $ref = $value; //Assign the value to the calculated reference.
    unset($ref);//must unset the $ref , otherwise it can produce unpredictable results. See the example here http://php.net/manual/en/language.references.php#83325
    return true;
}

Ví dụ sử dụng

$arr = array(
    'a' => array(
        'b' => array(
            'c' => 100,
        )
    ),
    'x' => array(),
);
$keys = array('a', 'b','c');
 
insert_into_array_by_key_chain($arr, $keys, 500 );
$keys = array('a', 'b','d');
insert_into_array_by_key_chain($arr, $keys, 600 );
$keys = array('a', 'b','e','');
insert_into_array_by_key_chain($arr, $keys, 'hello' );
insert_into_array_by_key_chain($arr, $keys, 'world' );


ĐẦU RA

Array
(
    [a] => Array
        (
            [b] => Array
                (
                    ['c'] => 500
                    [d] => 600
                    [e] => Array
                        (
                            [0] => hello
                            [1] => world
                        )
  
                )
  
        )
  
    [x] => Array
        (
        )
  
)

1 2 3 4
5 6 7 8
9 10 11 12
2_______70__________
1 2 3 4
5 6 7 8
9 10 11 12
38_______70_______
1 2 3 4
5 6 7 8
9 10 11 12
40
1 2 3 4
5 6 7 8
9 10 11 12
8
1 2 3 4
5 6 7 8
9 10 11 12
42
1 2 3 4 5 6 7 8 9 10 11 12
0
1 2 3 4 5 6 7 8 9 10 11 12
1int
1 2 3 4
5 6 7 8
9 10 11 12
46

1 2 3 4
5 6 7 8
9 10 11 12
2_______12_______7 int7

1 2 3 4 5 6 7 8 9 10 11 12
1int9int___main(1_______7_______8main(3
1 2 3 4 5 6 7 8 9 10 11 12
0
1 2 3 4 5 6 7 8 9 10 11 12
1int12_______3

 

1 2 3 4
5 6 7 8
9 10 11 12
2______76_______9

1 2 3 4
5 6 7 8
9 10 11 12
2void1

1 2 3 4
5 6 7 8
9 10 11 12
2_______12_______7 int7

1 2 3 4 5 6 7 8 9 10 11 12
1
1 2 3 4 5 6 7 8 9 10 11 12
7 void7

1 2 3 4 5 6 7 8 9 10 11 12
5void9
1 2 3 4
5 6 7 8
9 10 11 12
72

 

1 2 3 4
5 6 7 8
9 10 11 12
2_______12_______7 int7

1 2 3 4 5 6 7 8 9 10 11 12
1
1 2 3 4 5 6 7 8 9 10 11 12
7 void7

1 2 3 4 5 6 7 8 9 10 11 12
5
1 2 3 4 5 6 7 8 9 10 11 12
6
1 2 3 4 5 6 7 8 9 10 11 12
1
1 2 3 4 5 6 7 8 9 10 11 12
8
1 2 3 4
5 6 7 8
9 10 11 12
11

 

1 2 3 4
5 6 7 8
9 10 11 12
2_______7_______13

1 2 3 4
5 6 7 8
9 10 11 12
86
1 2 3 4
5 6 7 8
9 10 11 12
15

 

1 2 3 4
5 6 7 8
9 10 11 12
2_______12_______7
1 2 3 4 5 6 7 8 9 10 11 12
1int
1 2 3 4
5 6 7 8
9 10 11 12
20

1 2 3 4 5 6 7 8 9 10 11 12
1#include 8
1 2 3 4
5 6 7 8
9 10 11 12
23

 

1 2 3 4
5 6 7 8
9 10 11 12
2_______87_______8
1 2 3 4
5 6 7 8
9 10 11 12
98

 

1 2 3 4
5 6 7 8
9 10 11 12
2_______89_______1 #include 2

#include 6

đầu ra.  

1 2 3 4 5 6 7 8 9 10 11 12

4) Sử dụng con trỏ kép và một lệnh gọi malloc
 

C




1 2 3 4 5 6 7 8 9 10 11 12
03

1 2 3 4 5 6 7 8 9 10 11 12
04

 

int #include 7

1 2 3 4
5 6 7 8
9 10 11 12
1

1 2 3 4
5 6 7 8
9 10 11 12
2_______70_______
1 2 3 4 5 6 7 8 9 10 11 12
10

1 2 3 4
5 6 7 8
9 10 11 12
2_______70_______
1 2 3 4 5 6 7 8 9 10 11 12
13

1 2 3 4
5 6 7 8
9 10 11 12
2_______70_______
1 2 3 4 5 6 7 8 9 10 11 12
16

 

1 2 3 4
5 6 7 8
9 10 11 12
2_______12_______18
1 2 3 4 5 6 7 8 9 10 11 12
0
1 2 3 4 5 6 7 8 9 10 11 12
1int
1 2 3 4 5 6 7 8 9 10 11 12
22
1 2 3 4 5 6 7 8 9 10 11 12
0
1 2 3 4 5 6 7 8 9 10 11 12
1int
1 2 3 4 5 6 7 8 9 10 11 12
26

Làm cách nào để tạo mảng đa chiều trong PHP một cách linh hoạt?

PHP cho phép một cách rất đơn giản để khai báo một mảng nhiều chiều trong PHP bằng cách sử dụng từ khóa 'mảng' . Để khai báo một mảng bên trong một mảng khác, chúng ta cần thêm từ khóa 'mảng' và sau đó là các phần tử của mảng đó.

Làm cách nào để khai báo mảng động trong PHP?

Vì PHP được nhập động nên bạn không cần khai báo một mảng hoặc chỉ định một loại biến cụ thể mà mảng đó chứa . Tuy nhiên, có một số cách mà bạn có thể khởi tạo một mảng. Để tạo một mảng trống, bạn có thể gọi hàm array().

PHP có mảng động không?

Có, mảng PHP là mảng động , theo nghĩa là người ta có thể tạo mảng, chèn phần tử mới, xóa phần tử, v.v.

Làm cách nào để tạo mảng đa chiều từ mảng trong PHP?

Bạn tạo một mảng nhiều chiều sử dụng cấu trúc array() , giống như tạo một mảng thông thường. Sự khác biệt là mỗi phần tử trong mảng bạn tạo chính là một mảng. Ví dụ. $myArray = mảng(mảng(giá trị1,giá trị2,giá trị3),mảng(giá trị4,giá trị5,giá trị6),mảng(giá trị7,giá trị8,giá trị9));