在PHP中创建一个空的二维数组?

35

我知道数组是动态创建的,提前创建它们并不是必要的,但如何在 2D 数组中进行这样的操作呢?可以用同样的方法吗?

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

像这样的吗?当然,实际情况中是使用真正的for循环。


5
一个空的二维数组... $array = array(array()); - JamesHalsall
如果你确定想要用空字符串n*m次来填充数组,那么这种方法似乎是正确的。 - Matthieu Napoli
3
我不知道这些负评是怎么回事。我已经找了但没找到答案,所以我才会问的。请原谅我试图学习如何使用PHP。 - Joshua
1
给你的评论点了个赞,让它回到了0 :) - Christian Smorra
8个回答

54

在最简单的情况下,可以创建一个二维数组:

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

从PHP 5.4开始,您也可以使用以下方法:

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

5
没问题,我认为人们之所以给这个问题投反对票是因为他们不理解提问背后的原因。这不是一个合理的反对理由。这就是评论存在的目的。继续提问吧... :) - Brendan Bullen
@Joshua 时间会揭示真相! - windsound
要小心,因为print_r($emptyArray)显示它并不是真正的空(如果删除内部[]将使其成为1D数组,这将很难)。 - Herbert Van-Vliet

24

在PHP中,传统意义上并不创建二维数组。

上面的建议关于$a = array(array());实际上只是创建了以下数组:

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

因此,$a[0][0] = 'test'; 会导致以下结果:

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

乍一看,它似乎能够工作,但事实上,这仍然不是一个二维数组。当您尝试使用第二行(索引1)时,PHP会抛出一个警告。例如:

$a[1][0] = 'test2';
这是因为$a[1]中没有任何内容(请记住array(array())只是在索引0处创建一个数组)。

要使其工作,您需要再次执行$a[1] = array();,或者如果您想避免索引,可以执行$a[] = array();


示例

$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();
    }
}

上述代码创建了一个5x3的“二维数组”,其中包含随机数。


当我使用二维数组时,我想知道我的空条目是从哪里来的。在函数顶部将 $arr[]=array(); 更改为 $arr[$id]=array(); 在使用它的地方,一切都恢复正常了。 - RST

2

PHP文档通常是解决这类基础问题的好方法。

<?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
我查看了多维数组的文档,但没有关于如何创建空数组的示例。 - Joshua

2

请说明您想要做什么?您可以使用foreach函数遍历多维数组。

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

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

或者

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

2
使用"array(array())"将创建一个具有“空”元素的2D数组,该元素位于第一个位置。要创建一个真正的空白2D数组,需要删除此元素。
<?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]创建一个空元素。 - radleybobins

2
如果我想创建一个空数组来处理文本文件中的行,我只需要使用 $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/>";
}

0

请记住,每当您使用array(array())嵌套函数或短数组语法[[]]时,都会创建一个带有第一个位置上的empty元素的2D数组。这可能会导致一些错误,因此我们需要将其删除。

我们如何删除empty元素?

很简单,只需调用array_pop()方法弹出数组中的element[0]即可,如下所示:

<?php
    $a = array(array());
    echo 'Before removing the empty element: \n'
    print_r($a);
    array_pop($a);
    print_r($a);

    $b = [[]];
    echo 'Before removing the empty element: \n'
    print_r($b);
    array_pop($b);
    print_r($b);
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接