【问题标题】:Loop an array of array循环数组数组
【发布时间】:2011-12-24 16:52:15
【问题描述】:

在 PHP 中,我如何在不知道是否是数组的情况下循环数组?

举个例子更好:

Array
(
    [0] => Array
        (
            [0] => big
            [1] => small
        )

    [1] => Array
        (
            [0] => big
            [1] => tiny
        )

    [2] => Array
        (
            [0] => a
            [1] => b
            [2] => c
            [3] => d
            [4] => e
            [5] => f
        )
    [3] => row
    [4] => cols
    [5] => blablabla
    [6] => Array
        (
            [0] => asd
            [1] => qwe
        )
}

有什么想法吗?谢谢。

【问题讨论】:

    标签: php loops multidimensional-array


    【解决方案1】:

    选择哪种方法取决于您要对数据执行的操作。

    array_walk_recursive [docs] 让您可以递归地遍历数组。

    【讨论】:

      【解决方案2】:

      您可以使用is_array 来检查该元素是否为数组,如果是,则递归循环它。

      【讨论】:

        【解决方案3】:

        您可以使用is_array 来检查某个东西是否是一个数组,并且/或者您可以使用is_object 来检查它是否可以在foreach 中使用:

        foreach ($arr as $val)
        {
            if (is_array($val) || is_object($val)) 
            {
                foreach ($val as $subval)
                {
                    echo $subval;
                }
            }
            else
            {
                echo $val;
            }
        }
        

        另一种选择是使用RecursiveIteratorIterator

        $it = new RecursiveIteratorIterator(
                   new RecursiveArrayIterator($arr),
                   RecursiveIteratorIterator::SELF_FIRST);
        
        foreach($it as $value)
        {
           # ... (each value)
        }
        

        递归迭代器适用于多个深度层次。

        【讨论】:

          【解决方案4】:
          foreach( $array as $value ) {
              if( is_array( $value ) ) {
                  foreach( $value as $innerValue ) {
                      // do something
                  }
              }
          }
          

          如果您知道它最多有 2 层嵌套数组,那就可以了。如果您不知道嵌套的层数,那么您将需要使用递归。或者你可以使用array_walk_recursive等函数

          【讨论】:

            【解决方案5】:
            $big_array = array(...);
            function loopy($array)
            {
                foreach($array as $element)
                {
                    if(is_array($element))
                    {
                        // Keep looping -- IS AN ARRAY--
                        loopy($element);
                    }
                    else
                    {
                        // Do something for this element --NOT AN ARRAY--
                    }
                }
            }
            
            loopy();
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-10-28
              • 2018-01-21
              • 2019-02-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多