将数组分成若干块,并在每一行前面添加一个静态元素


Break array into chunks and prepend each row with a static element

我有以下数组:

$list = array('item1','item2','item3','item4','item5','item6');

我需要取这个数组,并将其分解为csv的1个数组中的较小数组。每个小数组的索引0处都需要有"999999",然后是$list数组中的下两个项。所以最终的结果是这样的:

$newList = array(
    array(999999, "item1" , "item2"),
    array(999999, "item3" , "item4"),
    array(999999, "item5" , "item6")
); 

原始列表数组有时可能包含多达100个值。实现这一目标的最佳方式是什么?

这里有一种不同的方法,请查看关于将额外元素放置在何处的注释(您可以在末尾的合并中添加第二个数组,以在2个列表项之后添加元素!)

有关工作示例,请参见此处:http://codepad.org/hucpT5Yo

<?php
$list = array('item1','item2','item3','item4','item5','item6');
$list_chunks = array_chunk($list,2);
$list_chunks2 = array_map(
                     create_function(
                        '$x',  
                        'return array_merge(array(
                           /* This array is prepended to the second, 
                              add as many elements as you like */
                           999999,
                           "another element to add",
                           483274832
                            ), 
                        $x);'), 
                     $list_chunks);
print_r($list_chunks2);
?>
$idx = 0;
$newarray = array();
$temparray = array('999999');
foreach($oldarray as $value) {
   $temparray[] = $value;
   if ((++$idx % 2)) == 0) {
       $newarray[] = $temparray;
       $temparray = array('999999');
   }
}

将平面数组分解为一个包含array_chunk()行的数组,然后在每行调用array_merge(),静态值999999嵌套在数组中并指定为第一个参数。

@Lee演示的chunk-n-merge技术的现代语法如下:

代码:(演示)

$list = ['item1','item2','item3','item4','item5','item6'];
var_export(
    array_map(fn($row) => array_merge([999999], $row), array_chunk($list, 2))
);

输出:

array (
  0 => 
  array (
    0 => 999999,
    1 => 'item1',
    2 => 'item2',
  ),
  1 => 
  array (
    0 => 999999,
    1 => 'item3',
    2 => 'item4',
  ),
  2 => 
  array (
    0 => 999999,
    1 => 'item5',
    2 => 'item6',
  ),
)