【问题标题】:find and loop items in array by id按 id 查找和循环数组中的项目
【发布时间】:2014-12-12 09:51:11
【问题描述】:

我有一个包含多个索引的数组,例如

$arr = array(
   1 => array('id' => 0,
              'container' => 1
        ),
   2 => array('id' => 1,
              'container' => 1
        ),
   3 => array('id' => 2,
              'container' => 2
        ),
   4 => array('id' => 3,
              'container' => 1
        )
);

如何找到并循环遍历容器为 1 的所有项目,然后循环所有容器为 2 的项目,依此类推..

【问题讨论】:

  • 数组定义中的: 有什么作用?
  • 也许你想用=>而不是:
  • 啊,是的,我的错。应该 => 在 jQuery 数组上工作,所以我很糟糕。感谢您的指正。但仍然需要找出循环这些项目的方法。

标签: php arrays for-loop foreach


【解决方案1】:

除了使用错误的数组赋值:。只需将其更改为=>

然后只需使用 foreach 循环:

$containers = array(1, 2);
foreach($containers as $container) {
    foreach ($arr as $value) {
        if($container == $value['container']) {
            echo "Container: $container : ";
            echo $value['id'] . '<br/>';
        }
    }
}

【讨论】:

    【解决方案2】:

    有很多方法可以做到这一点。这个通过给定的键重新构造/分组数组 - 如果您遍历所有元素,这是可行的。

    <?php
    $arr = array(
       1 => array('id' => 0,
                  'container' => 1
            ),
       2 => array('id' => 1,
                  'container' => 1
            ),
       3 => array('id' => 2,
                  'container' => 2
            ),
       4 => array('id' => 3,
                  'container' => 1
            )
    );
    
    $byContainer = groupBy($arr, 'container');
    foreach($byContainer as $container=>$items) {
        echo $container, "\r\n";
        foreach($items as $e) {
            echo '  ', $e['id'], "\r\n";    
        }
    }
    
    function groupBy($arr, $key) {
        $result = array();
        foreach($arr as $e) {
            if ( !isset($result[ $e[$key] ]) ) {
                $result[ $e[$key] ] = array($e);
            }
            else {
                $result[ $e[$key] ][] = $e;
            }
        }
        return $result;
    }
    

    【讨论】:

      【解决方案3】:
      <?php
      $arr = array(1 => array('id'=> 0, 'container'=> 1),
      2 => array('id'=> 1, 'container'=> 1),
         3 => array('id'=> 2, 'container'=> 2),
         4 => array('id'=> 3, 'container'=> 1));
      $temp = array();
      foreach ($arr as $elem) {
       foreach ($elem as $k => $v) {
         if ($k == 'container') {
           $temp[$k][$v][] = $v;
         }
       }
      }
      print_r($temp);
      ?>
      

      Working Example

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-28
        • 1970-01-01
        • 2014-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多