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 //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 122_______70__________
1 2 3 4 5 6 7 8 9 10 11 1238_______70_______
1 2 3 4 5 6 7 8 9 10 11 1240
1 2 3 4 5 6 7 8 9 10 11 128
1 2 3 4 5 6 7 8 9 10 11 1242
1 2 3 4 5 6 7 8 9 10 11 120
1 2 3 4 5 6 7 8 9 10 11 121
int
1 2 3 4 5 6 7 8 9 10 11 1246
1 2 3 4 5 6 7 8 9 10 11 122_______12_______7
int
71 2 3 4 5 6 7 8 9 10 11 121
int
9int
___main[
1_______7_______8main[
31 2 3 4 5 6 7 8 9 10 11 120
1 2 3 4 5 6 7 8 9 10 11 121
int
12_______3
1 2 3 4 5 6 7 8 9 10 11 122______76_______9
1 2 3 4 5 6 7 8 9 10 11 122
void
11 2 3 4 5 6 7 8 9 10 11 122_______12_______7
int
71 2 3 4 5 6 7 8 9 10 11 121
1 2 3 4 5 6 7 8 9 10 11 127
void
71 2 3 4 5 6 7 8 9 10 11 125
void
91 2 3 4 5 6 7 8 9 10 11 1272
1 2 3 4 5 6 7 8 9 10 11 122_______12_______7
int
71 2 3 4 5 6 7 8 9 10 11 121
1 2 3 4 5 6 7 8 9 10 11 127
void
71 2 3 4 5 6 7 8 9 10 11 125
1 2 3 4 5 6 7 8 9 10 11 126
1 2 3 4 5 6 7 8 9 10 11 121
1 2 3 4 5 6 7 8 9 10 11 128
1 2 3 4 5 6 7 8 9 10 11 1211
1 2 3 4 5 6 7 8 9 10 11 122_______7_______13
1 2 3 4 5 6 7 8 9 10 11 1286
1 2 3 4 5 6 7 8 9 10 11 1215
1 2 3 4 5 6 7 8 9 10 11 122_______12_______7
1 2 3 4 5 6 7 8 9 10 11 121
int
1 2 3 4 5 6 7 8 9 10 11 1220
1 2 3 4 5 6 7 8 9 10 11 121
#include
81 2 3 4 5 6 7 8 9 10 11 1223
1 2 3 4 5 6 7 8 9 10 11 122_______87_______8
1 2 3 4 5 6 7 8 9 10 11 1298
1 2 3 4 5 6 7 8 9 10 11 122_______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 1203
1 2 3 4 5 6 7 8 9 10 11 1204
int
#include
7
1 2 3 4 5 6 7 8 9 10 11 121
1 2 3 4 5 6 7 8 9 10 11 122_______70_______
1 2 3 4 5 6 7 8 9 10 11 1210
1 2 3 4 5 6 7 8 9 10 11 122_______70_______
1 2 3 4 5 6 7 8 9 10 11 1213
1 2 3 4 5 6 7 8 9 10 11 122_______70_______
1 2 3 4 5 6 7 8 9 10 11 1216
1 2 3 4 5 6 7 8 9 10 11 122_______12_______18
1 2 3 4 5 6 7 8 9 10 11 120
1 2 3 4 5 6 7 8 9 10 11 121
int
1 2 3 4 5 6 7 8 9 10 11 1222
1 2 3 4 5 6 7 8 9 10 11 120
1 2 3 4 5 6 7 8 9 10 11 121
int
1 2 3 4 5 6 7 8 9 10 11 1226