如何使用带有foreach的PHP创建此数组

时间:2014-02-14 10:46:40

标签: php arrays foreach

也许我会试着以相反的方式问你。 在使用foreach循环创建数组时,我总是遇到问题。

数组应如下所示:

$arr[0]['title'] = 'Title'; --> first foreach-loop
$arr[0]['title'][0]['data'] = 'Text'; --> second foreach-loop

但是当我开始填充第二个foreach循环时,PHP会抛出一个错误:

Cannot use string offset as an array 

我希望将这个结果与我的foreach结合,但我找不到我的问题:

array(2) {
  ["fields"]=>
  array(32) {
    [0]=>
    string(10) "Background"
    ["Area"]=>
    array(3) {
      ["total"]=>
      array(2) {
        [0]=>
        string(3) "123"
        ["parent"]=>
        array(1) {
          [0]=>
          string(1) "0"
        }
      }
      ["land"]=>
      array(1) {
        [0]=>
        string(3) "456"
      }
      ["water"]=>
      array(1) {
        [0]=>
        string(3) "789"
      }
    }

修改 我使用以下命令创建我的数组:

$arr = array();
foreach ($nodes as $i => $node) {
  $arr[$i]['title'] = $node;
  // some if to select the important elements
  foreach ($subnodes as $j => $subnode) {
    $arr[$i]['title'][$j]['data'] = $subnode;
  }
}

2 个答案:

答案 0 :(得分:0)

如果从fields级别开始,则您的第三级密钥不是整数:

array(2) {
  ["fields"]=> // ROOT LEVEL string
  array(32) {
    [0]=> // FIRST LEVEL int
    string(10) "Background"
    ["Area"]=> //SECOND LEVEL string
    array(3) {
      ["total"]=> //THIRD LEVEL string
      array(2) {
        [0]=>
       .... 

或者您尝试使用整数键访问:

$arr[0] //FIRST LEVEL int
   ['title'] //SECOND LEVEL string
      [0] //THIRD LEVEL int <= here is the mismatch
        ['data'] = 'Text';

答案 1 :(得分:0)

使用以下代码:

$arr = array();
foreach ($nodes as $i => $node) {
$arr[$i]['title'] = array();  
$arr[$i]['title']['value'] = $node;
  // some if to select the important elements
  foreach ($subnodes as $j => $subnode) {
    $arr[$i]['title'][$j] = array();
    $arr[$i]['title'][$j]['data'] = $subnode;
  }
}