在 php 中创建、访问和理解多维数组



我实现了以下小示例:

$nodeList;  
for($i = 0; $i < 10;$i++) {
    $nodeList[$i] = $i;
    for($j = 0; $j < 3;$j++) {
        $nodeList[$i][$j] = $j;
    }
}
foreach($nodeList[0] as $nodeEl) {
    print "NodeEl: ".$nodeEl." | ";
}
print nl2br("nr");
$testList = array
  (
  array(1,2,3),
  array(4,5,6),
  array(7,8,9),
  array(10,11,12),
  );
foreach($testList[0] as $testEl) {
    print "TestEl: ".$testEl." | ";
}

其中$nodeList的输出是null(也是var_dump/print_r),$testList的输出是TestEl: 1 | TestEl: 2 | TestEl: 3,正如预期的那样。

在我的理解中,这两个解决方案应该创建大致相同的输出 - 但第一个解决方案根本没有输出。因为甚至没有创建数组的第二维。

阅读 http://php.net/manual/de/language.types.array.php 会产生一种强烈的感觉,即 [] 运算符仅用于取消引用/访问数组,但随后文档再次提供了一个示例,它们以与我相同的方式为某个键分配值$arr["x"] = 42

这两种阵列访问方式之间有什么区别?

如何以类似于我尝试填充$nodeList的方式填充 n 维数组?

应确保打开错误报告,因为会为代码生成警告:

E_WARNING :  type 2 -- Cannot use a scalar value as an array -- at line 7

这涉及以下声明:

$nodeList[$i] = $i;

如果要创建 2D 数组,则在第一级分配数字没有任何意义。相反,您希望$nodeList[$i]是一个数组。当你使用括号[...]访问它时,PHP 会隐式地这样做(创建数组),所以你可以省略有问题的语句,然后执行以下操作:

for($i = 0; $i < 10;$i++) {
    for($j = 0; $j < 3;$j++) {
        $nodeList[$i][$j] = $j;
    }
}

您甚至可以省略最后一个括号对中的$j,这意味着 PHP 将使用下一个可用的数字索引添加到数组中:

for($i = 0; $i < 10;$i++) {
    for($j = 0; $j < 3;$j++) {
        $nodeList[$i][] = $j;
    }
}

在每个级别添加值

如果您确实需要在 2D 数组的第一级存储$i,请考虑使用更复杂的结构,其中每个元素都是具有两个键的关联数组:一个用于值,另一个用于嵌套数组:

for($i = 0; $i < 10; $i++) {
    $nodeList[$i] = array(
        "value" => $i,
        "children" => array()
    );
    for($j = 0; $j < 3;$j++) {
        $nodeList[$i]["children"][] = array(
            "value" => "$i.$j" // just example of value, could be just $j
        );
    }
}

$nodeList将是这样的:

array (
  array (
    'value' => 0,
    'children' => array (
      array ('value' => '0.0'),
      array ('value' => '0.1'),
      array ('value' => '0.2'),
    ),
  ),
  array (
    'value' => 1,
    'children' => array (
      array ('value' => '1.0'),
      array ('value' => '1.1'),
      array ('value' => '1.2'),
    ),
  ),
  //...etc
);

你应该写

<?php
$nodeList;  
for($i = 0; $i < 10;$i++) {
    for($j = 0; $j < 3;$j++) {
        $nodeList[$i][$j] = $j;
    }
}
foreach($nodeList[0] as $nodeEl) {
    print "NodeEl: ".$nodeEl." | ";
}

你需要将$nodeList声明为数组,如下所示

$nodeList=array();

和 2D 阵列

$nodeList= array(array());

相关内容

  • 没有找到相关文章

最新更新