【问题标题】:Reindex array in php [duplicate]在php中重新索引数组[重复]
【发布时间】:2017-08-03 04:50:28
【问题描述】:

我有这样的数组:

Array ( 
  [0] => Array ( [0] => Red [1] => Blue [2] => Black [3] => White [4] => Silver)
  [1] => Array ( [0] => Yellow [1] => Green [2] => Pink [3] => Purple)
  [2] => Array ( [0] => Orange [1] => Olive [2] => Lime)
etc..
)

预期数组:

Array ( 
   [0] => Red
   [1] => Blue
   [2] => Black
   [3] => White
   [4] => Silver
   [5] => Yellow  
   [6] => Green
   [7] => Pink
   [8] => Purple
   [9] => Orange
   [10] => Olive
   [11] => Lime
   etc..
) 

如何进行这种重构?看不懂

谢谢!

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    你可以像这样使用array_merge函数...

    <?php
    $array1 = Array ( 
      [0] => Array ( [0] => Red [1] => Blue [2] => Black [3] => White [4] => Silver)
      [1] => Array ( [0] => Yellow [1] => Green [2] => Pink [3] => Purple)
      [2] => Array ( [0] => Orange [1] => Olive [2] => Lime)
    etc..
    )
    
    $array2 = Array();
    for($i=0; $i<$array1.length; $i++) {
        $array2 = array_merge($array2, $array1[$i]);
    }
    
    print_r($array2);
    ?>
    

    【讨论】:

    • 此解决方案无法正常工作。 $array1.length 导致错误。用count($array1)改变它。
    【解决方案2】:

    php中有一个非常方便的内置方式。 Array_merg 是一个将无限数量的参数组合成最终数组的函数。而 call_user_func_array 会自动将参数填充到 Array_merg 中,这样我们就可以通过单线实现我们的目标:

    PHP

    <?php
    
    $workwith = Array ( 
        Array("Red", "Blue", "Black", "White", "Silver"),
        Array("Yellow", "Green", "Pink", "Purple"),
        Array("Orange", "Olive", "Lime")
    );
    
    $result = call_user_func_array("array_merge", $workwith);
    print_r($result);
    
    ?>
    

    输出

        Array
    (
        [0] => Red
        [1] => Blue
        [2] => Black
        [3] => White
        [4] => Silver
        [5] => Yellow
        [6] => Green
        [7] => Pink
        [8] => Purple
        [9] => Orange
        [10] => Olive
        [11] => Lime
    )
    

    【讨论】:

      【解决方案3】:

      试试这个

      $arrayIndex = 0;
          $ar=array(
              array("red","black","blue"),
              array("Green", "Pink", "Yellow")
          );
          for ($i = 0; $i < sizeof($ar); $i++){
              for ($i1 = 0; $i1 < sizeof($ar[$i]); $i1++){
                  $newArray[$arrayIndex] = $ar[$i][$i1];
                  $arrayIndex++;
              }
          }
      

      【讨论】:

        【解决方案4】:

        使用array_walk_recursive

        array_walk_recursive($ar, function($v, $k) use (&$list) {return $list[] = $v;});
        print_r($list);
        

        实时示例:https://3v4l.org/DRMKI

        【讨论】:

        • 这个解决方案比公认的答案慢。
        猜你喜欢
        • 2011-11-25
        • 1970-01-01
        • 2021-12-22
        • 1970-01-01
        • 2010-12-01
        • 2012-05-18
        • 2017-09-13
        • 2013-03-12
        • 2012-12-21
        相关资源
        最近更新 更多