Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中迭代复杂关联数组_Php_Arrays_Associative Array - Fatal编程技术网

在PHP中迭代复杂关联数组

在PHP中迭代复杂关联数组,php,arrays,associative-array,Php,Arrays,Associative Array,有没有一种简单的方法可以在PHP中迭代这种结构的关联数组: 数组$searches具有编号索引,包含4到5个关联部分。因此,我不仅需要通过$searches[n]对$searches[0]进行迭代,还需要通过$searches[n][“part0”]进行迭代。困难的部分是不同的索引有不同数量的部分(有些可能缺少一个或两个) 想用一种漂亮、整洁、易懂的方式来做这件事吗?你应该能够使用嵌套的foreach语句 从 您可以循环所有“part[n]”项并使用isset查看它们是否确实存在吗?嵌套两个:

有没有一种简单的方法可以在PHP中迭代这种结构的关联数组:

数组
$searches
具有编号索引,包含4到5个关联部分。因此,我不仅需要通过
$searches[n]
$searches[0]
进行迭代,还需要通过
$searches[n][“part0”]
进行迭代。困难的部分是不同的索引有不同数量的部分(有些可能缺少一个或两个)


想用一种漂亮、整洁、易懂的方式来做这件事吗?

你应该能够使用嵌套的foreach语句


您可以循环所有“part[n]”项并使用isset查看它们是否确实存在吗?

嵌套两个:


我真的不知道你在这里指的是什么-一对foreach循环确实满足了你的需要吗

foreach($array as $id => $assoc)
{
    foreach($assoc as $part => $data)
    {
        // code
    }
}

或者你需要一些递归的东西?我可以在示例数据和您希望返回数据的上下文方面提供更多帮助。

看起来是递归函数的好地方,尤其是在深度超过两个级别的情况下

function doSomething(&$complex_array)
{
    foreach ($complex_array as $n => $v)
    {
        if (is_array($v))
            doSomething($v);
        else
            do whatever you want to do with a single node
    }
}

我知道这是一个关于亡灵术的问题,但是使用Spl迭代器在多维数组上进行迭代很容易

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));

foreach($iterator as $key=>$value) {
    echo $key.' -- '.$value.'<br />';
}
$iterator=new recursiveiterator(new recursivearrayiiterator($array));
foreach($key=>$value的迭代器){
回显$key.'-'.$value.
; }


    • 考虑一下这个多维数组,我希望这个函数会有所帮助

      $n = array('customer' => array('address' => 'Kenmore street',
                      'phone' => '121223'),
            'consumer' => 'wellington consumer',
            'employee' => array('name' => array('fname' => 'finau', 'lname' => 'kaufusi'),
                           'age' => 32,
                       'nationality' => 'Tonga')
            );
      
      
      
      iterator($n);
      
      function iterator($arr){
      
          foreach($arr as $key => $val){
      
          if(is_array($val))iterator($val);
      
          echo '<p>key: '.$key.' | value: '.$val.'</p>';
      
          //filter the $key and $val here and do what you want
          }
      
      }
      
      $n=array('customer'=>array('address'=>'Kenmore street'),
      “电话”=>“121223”),
      “消费者”=>“惠灵顿消费者”,
      'employee'=>array('name'=>array('fname'=>'finau','lname'=>'kaufusi'),
      “年龄”=>32岁,
      “国籍”=>“汤加”)
      );
      迭代器($n);
      函数迭代器($arr){
      foreach($arr作为$key=>$val){
      if(is_数组($val))迭代器($val);
      回显“key:”.$key.|值:”.$val.

      ”; //在此处筛选$key和$val并执行所需操作 } }
      $i和$values是来自关联数组的复制临时变量,还是它们引用了实际数组引用?@MMAmail.com:此代码不使用引用,而是使用副本。如果你真的想使用引用(但你通常不这么做!),你需要在变量名前加上符号AND,也就是说,
      &$i
      &$values
      在它们的声明中,您应该
      取消设置循环后的变量。如果其中一个数组元素是可迭代对象,会发生什么?您知道如何将其从迭代中排除吗?,所以只有数组被迭代?@Petah将迭代器包装到一个filterierator中,该filterierator检查accept()方法中的is_对象。
      
      $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
      
      foreach($iterator as $key=>$value) {
          echo $key.' -- '.$value.'<br />';
      }
      
      $n = array('customer' => array('address' => 'Kenmore street',
                      'phone' => '121223'),
            'consumer' => 'wellington consumer',
            'employee' => array('name' => array('fname' => 'finau', 'lname' => 'kaufusi'),
                           'age' => 32,
                       'nationality' => 'Tonga')
            );
      
      
      
      iterator($n);
      
      function iterator($arr){
      
          foreach($arr as $key => $val){
      
          if(is_array($val))iterator($val);
      
          echo '<p>key: '.$key.' | value: '.$val.'</p>';
      
          //filter the $key and $val here and do what you want
          }
      
      }