Cách dễ nhất để tạo mảng 2d là gì. Tôi đã hy vọng có thể làm điều gì đó tương tự như thế này:
declare int d[0..m, 0..n]
Câu trả lời:
Bạn cũng có thể tạo một mảng kết hợp hoặc một "bảng băm" giống như mảng, bằng cách chỉ định chỉ mục của mảng.
$array = array(
0 => array(
'name' => 'John Doe',
'email' => 'john@example.com'
),
1 => array(
'name' => 'Jane Doe',
'email' => 'jane@example.com'
),
);
Tương đương với
$array = array();
$array[0] = array();
$array[0]['name'] = 'John Doe';
$array[0]['email'] = 'john@example.com';
$array[1] = array();
$array[1]['name'] = 'Jane Doe';
$array[1]['email'] = 'jane@example.com';
Những điều sau là tương đương và kết quả là một mảng hai chiều:
$array = array(
array(0, 1, 2),
array(3, 4, 5),
);
hoặc là
$array = array();
$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);
Chỉ cần khai báo? Bạn không cần phải làm vậy. Chỉ cần đảm bảo rằng biến tồn tại:
$d = array();
Mảng được thay đổi kích thước động và cố gắng ghi bất kỳ thứ gì vào phần tử không tồn tại sẽ tạo ra nó (và tạo toàn bộ mảng nếu cần)
$d[1][2] = 3;
Điều này hợp lệ cho bất kỳ số lượng thứ nguyên nào mà không cần khai báo trước.
count
đúng chiều, ví dụ count($d[1])
, trừ khi tôi hiểu sai ý của bạn?
Thứ nhất, PHP không có mảng đa chiều, nó có các mảng của mảng.
Thứ hai, bạn có thể viết một hàm sẽ làm điều đó:
function declare($m, $n, $value = 0) {
return array_fill(0, $m, array_fill(0, $n, $value));
}
Đối với một loại giải pháp đơn giản, "điền khi bạn thực hiện":
$foo = array(array());
Điều này sẽ giúp bạn có được một mảng hai chiều giả linh hoạt có thể chứa $ foo [ n ] [ n ] trong đó n <= ∞ (tất nhiên là của bạn bị giới hạn bởi các ràng buộc thông thường về kích thước bộ nhớ, nhưng tôi hy vọng bạn sẽ có được ý tưởng). Về lý thuyết, điều này có thể được mở rộng để tạo ra nhiều mảng con như bạn cần.
Theo như tôi biết thì không có hàm php nào được tích hợp sẵn để thực hiện việc này, bạn cần thực hiện nó thông qua một vòng lặp hoặc thông qua một phương thức tùy chỉnh gọi đệ quy đến một cái gì đó như array_fill inidcated trong answer by @Amber;
Tôi giả sử ý bạn là đã tạo một mảng mảng rỗng nhưng phức tạp. Ví dụ: bạn muốn kết quả cuối cùng giống như bên dưới của một mảng gồm 3 mảng :
$final_array = array(array(), array(), array());
Điều này rất đơn giản để chỉ viết tay mã, nhưng đối với một mảng có kích thước tùy ý như một mảng 3 mảng 3 mảng thì việc khởi tạo trước khi sử dụng bắt đầu phức tạp:
$final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));
...Vân vân...
Tôi nhận được sự thất vọng. Sẽ rất tuyệt nếu có một cách dễ dàng để khai báo một mảng đã khởi tạo của mảng bất kỳ độ sâu nào để sử dụng mà không cần kiểm tra hoặc ném lỗi.
Câu trả lời của atli thực sự đã giúp tôi hiểu điều này. Đây là một ví dụ về cách lặp qua một mảng hai chiều. Mẫu này cho thấy cách tìm các giá trị cho các tên đã biết của một mảng và cũng là phần mở đầu mà bạn chỉ cần xem qua tất cả các trường mà bạn tìm thấy ở đó. Tôi hi vọng nó giúp ích cho ai đó.
$array = array(
0 => array(
'name' => 'John Doe',
'email' => 'john@example.com'
),
1 => array(
'name' => 'Jane Doe',
'email' => 'jane@example.com'
),
);
foreach ( $array as $groupid => $fields) {
echo "hi element ". $groupid . "\n";
echo ". name is ". $fields['name'] . "\n";
echo ". email is ". $fields['email'] . "\n";
$i = 0;
foreach ($fields as $field) {
echo ". field $i is ".$field . "\n";
$i++;
}
}
Kết quả đầu ra:
hi element 0
. name is John Doe
. email is john@example.com
. field 0 is John Doe
. field 1 is john@example.com
hi element 1
. name is Jane Doe
. email is jane@example.com
. field 0 is Jane Doe
. field 1 is jane@example.com
Và đối với tôi, tranh luận về việc một mảng có nên thưa thớt hay không phụ thuộc vào ngữ cảnh.
Ví dụ: nếu $ a [6] [9] không được điền thì tương đương với $ a [6] [9] được điền ví dụ với "" hoặc 0.
$r = array("arr1","arr2");
để lặp lại một phần tử mảng duy nhất, bạn nên viết:
echo $r[0];
echo $r[1];
đầu ra sẽ là: arr1 arr2
Nếu bạn muốn nhanh chóng tạo mảng nhiều chiều cho giá trị đơn giản bằng cách sử dụng một lớp lót, tôi khuyên bạn nên sử dụng thư viện mảng này để thực hiện như sau:
$array = Arr::setNestedElement([], '1.2.3', 'value');
cái nào sẽ sản xuất
[
1 => [
2 => [
3 => 'value'
]
]
]
Bạn có thể thử điều này, nhưng các giá trị của thứ nguyên thứ hai sẽ bằng với chỉ mục:
$array = array_fill_keys(range(0,5), range(0,5));
phức tạp hơn một chút cho mảng trống:
$array = array_fill_keys(range(0, 5), array_fill_keys(range(0, 5), null));
Bạn cần khai báo một mảng trong một mảng khác.
$arr = array(array(content), array(content));
Thí dụ:
$arr = array(array(1,2,3), array(4,5,6));
Để lấy mục đầu tiên từ mảng, bạn sẽ sử dụng $arr[0][0]
, nó giống như mục đầu tiên từ mảng đầu tiên từ mảng.
$arr[1][0]
sẽ trả về mục đầu tiên từ mảng thứ hai từ mảng.