0

我在 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(),但是还有其他更优雅的方法吗?

4

5 回答 5

3

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

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

或者更好的是,array_reduce通过使用“splat”运算符将列直接解压到array_merge.

$result = array_merge(...array_column($all, 'itens'));
于 2017-09-25T19:24:35.450 回答
0

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

代码:(演示

$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',
)
于 2021-04-08T02:48:57.363 回答
0

使用循环和 array_merge:

$filteredArray = array();
foreach ($all as $array) {
   $filteredArray = array_merge($filteredArray, $array['itens']);
}
print_r($filteredArray);
于 2017-09-25T19:15:22.457 回答
0

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

$filteredArray = array();

foreach($all as $items) {
    foreach($items["itens"] as $item) {
        array_push($filteredArray, $item);
    }
}
于 2017-09-25T19:17:09.790 回答
0
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;
}
于 2017-09-25T19:32:26.570 回答