【问题标题】:Create a flat array of values from an array column containing array-type data从包含数组类型数据的数组列创建一个平面数组
【发布时间】:2018-03-06 20:30:55
【问题描述】:

我在 PHP 中有这个数组。

$all = array(
array(
    'titulo' => 'Nome 1',
    'itens' => array( 'item1', 'item2', 'item3')
),
array(
    'titulo' => 'Nome 2',
    'itens' => array( 'item4', 'item5', 'item6')
),
array(
    'titulo' => 'Nome 4',
    'itens' => array( 'item7', 'item8', 'item9')
));

我需要合并特定的子数组。换句话说,我需要将itens 数据列(包含数组类型的数据)作为平面结果数组,如下所示:

$filteredArray = array('item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8', 'item9');

我可以使用foreach() 做到这一点,但是还有其他更优雅的方法吗?

【问题讨论】:

标签: php arrays multidimensional-array flatten array-column


【解决方案1】:

您可以使用array_merge 作为回调来减少数组的itens 列。

$filteredArray = array_reduce(array_column($all, 'itens'), 'array_merge', []);

或者更好的是,通过使用"splat" operator 将列直接解压到array_merge 中来消除array_reduce

$result = array_merge(...array_column($all, 'itens'));

【讨论】:

    【解决方案2】:

    使用循环和array_merge:

    $filteredArray = array();
    foreach ($all as $array) {
       $filteredArray = array_merge($filteredArray, $array['itens']);
    }
    print_r($filteredArray);
    

    【讨论】:

      【解决方案3】:

      你可以遍历你的数组并加入它们:

      $filteredArray = array();
      
      foreach($all as $items) {
          foreach($items["itens"] as $item) {
              array_push($filteredArray, $item);
          }
      }
      

      【讨论】:

        【解决方案4】:
        function array_flatten($array) {
          if (!is_array($array)) {
            return false;
          }
          $result = array();
          foreach ($array as $key => $value) {
            if (is_array($value)) {
              $result = array_merge($result, array_flatten($value));
            } else {
              $result[$key] = $value;
            }
          }
          return $result;
        }
        

        【讨论】:

          【解决方案5】:

          另一种未提及的技术是迭代输入数组并将可变数量的元素推入输出数组。

          代码:(Demo)

          $result = [];
          foreach ($all as $row) {
              array_push($result, ...$row['itens']);
          }
          var_export($result);
          

          输出:

          array (
            0 => 'item1',
            1 => 'item2',
            2 => 'item3',
            3 => 'item4',
            4 => 'item5',
            5 => 'item6',
            6 => 'item7',
            7 => 'item8',
            8 => 'item9',
          )
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-05-14
            • 2018-08-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-09-03
            • 2020-02-26
            • 1970-01-01
            相关资源
            最近更新 更多