2011-07-07 37 views
28

Tôi biết rằng các mảng được tạo động và tạo chúng trước thời hạn không thực sự cần thiết, nhưng làm cách nào để thực hiện điều đó với một mảng 2D? Cùng một cách?Tạo một mảng 2D trống trong PHP?

(for$j) 
{ 
for($i) 
    { 
    $array[j][i] = "data"; 
    } 
} 

Điều gì đó tương tự? Rõ ràng là thực sự cho các vòng, tất nhiên.

+3

mảng trống 2 chiều ... '$ array = array (array());' – JamesHalsall

+0

Cách đó có vẻ chính xác, nếu bạn chắc chắn muốn điền mảng bằng chuỗi rỗng n * m lần. –

+1

Tôi không biết thỏa thuận với các downvotes là gì. Tôi nhìn và không thể tìm thấy câu trả lời, vì vậy tôi hỏi nó. Xin lỗi vì đã cố gắng học cách sử dụng php. – Joshua

Trả lời

39

Tại đơn giản nhất tuyệt đối của nó, một mảng chiều 2D có thể được tạo ra như:

<?php 
    $emptyArray = array(array()); 
?> 

Hoặc như của PHP 5.4 bạn cũng có thể sử dụng:

<?php 
    $emptyArray = [[]]; 
?> 
+0

Cảm ơn bạn. Đó là tất cả những gì tôi cần. – Joshua

+5

@Joshua Không sao cả. Tôi nghĩ mọi người bị bỏ rơi vì họ không hiểu lý do đằng sau câu hỏi. Không phải là một lý do tốt để downvote. Đó là ý kiến ​​của những gì. Hãy tiếp tục đặt câu hỏi ... :) –

+8

Việc bỏ phiếu sẽ không ngăn cản tôi cố học. – Joshua

2

PHP documentation luôn là cách hay để bắt đầu cho các loại câu hỏi cơ bản này.

<?php 
$arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42)); 

echo $arr["somearray"][6]; // 5 
echo $arr["somearray"][13]; // 9 
echo $arr["somearray"]["a"]; // 42 
?> 
+5

Tôi nhìn vào tài liệu mảng đa chiều, không có ví dụ để tạo ra một sản phẩm nào. – Joshua

1

bạn có thể xác định những gì bạn đang cố gắng làm gì? Bạn có thể lặp qua mảng đa chiều với chức năng foreach

$ary=array("subarr" => array("foo","bar")); 

foreach($ary as $a){ 
    foreach($a as $ary_sub){ 
    echo $ary_sub; 
    } 
} 

hoặc

foreach($ary["subarr"] as $key=>$subval){ 
echo $subval; 
} 
21

Bạn không tạo ra một mảng 2ngày trong PHP, không phải trong ý nghĩa truyền thống.

Những đề nghị trên về $a = array(array()); trên thực tế chỉ đơn giản là tạo ra các mảng sau:

$a = array(
    0 => array() 
); 

Do đó, $a[0][0] = 'test'; sẽ cho kết quả như sau:

$a = array(
    0 => array(
     0 => 'test' 
    ) 
); 

Trong nháy mắt đầu tiên, có vẻ như nó hoạt động , nhưng trên thực tế, đây vẫn không phải là mảng 2d. Khi bạn cố gắng sử dụng hàng thứ 2 (chỉ mục 1), tại thời điểm này, PHP sẽ ném một thông báo. Ví dụ:

$a[1][0] = 'test2'; 

Điều này là do $a[1] không chứa bất cứ điều gì (hãy nhớ rằng array(array()) chỉ đơn giản là tạo ra một mảng ở chỉ số 0?).

Để thiết bị hoạt động, bạn cần phải thực hiện lại $a[1] = array(); hoặc nếu bạn muốn tránh các chỉ mục bạn có thể thực hiện, $a[] = array();.


Ví dụ

$a = array(); // array of columns 
for($c=0; $c<5; $c++){ 
    $a[$c] = array(); // array of cells for column $c 
    for($r=0; $r<3; $r++){ 
     $a[$c][$r] = rand(); 
    } 
} 

Đoạn mã trên tạo ra một 5x3 "mảng 2ngày" của số ngẫu nhiên.

+0

Tôi tự hỏi các mục trống của tôi đến từ đâu khi sử dụng các mảng 2-dim. Đã thay đổi $ arr [] = array(); ở đầu hàm đến $ arr [$ id] = array(); nơi nó được sử dụng và tất cả là tốt một lần nữa – RST

+0

Cảm ơn !!!! Câu trả lời hoàn hảo! – lopata

2

Nếu tôi muốn tạo một mảng trống để xử lý các dòng từ tệp văn bản, tôi chỉ sử dụng $ array = array();

1
// dynamic 2D array 

$twoD = array(array()); 
$val = 0; 

// fill the array 
for($r = 0; $r < 4; $r++) { 
    for($c = 0; $c < 4; $c++) 
     $twoD[$r][$c] = $val++; 
} 

// print the current value of $val 
echo $val."<br/>------------------<br/>"; 

// print the array 
for($r = 0; $r < 4; $r++) { 
    for($c = 0; $c < 4; $c++) 
     echo $twoD[$r][$c]; 
    echo "<br/>"; 
} 
2

Sử dụng "mảng (mảng())" sẽ tạo mảng 2D có phần tử "trống" ở vị trí đầu tiên. Để tạo một mảng 2D thực sự trống, điều này cần được loại bỏ.

<?php 
    $emptyArray = array(array()); // Creates a 2D array with one empty element in $emptyArray[0] 
    array_pop($emptyArray);  // Pops element[0] off the array 
?> 
+0

Cảm ơn bạn đã chia sẻ điều này. Tôi nghĩ rằng tôi đang điên rồ cố gắng tìm ra cách tôi tạo ra một phần tử trống tại [0] – radleybobins