我有以下数组:
$list = array('item1','item2','item3','item4','item5','item6');
我需要获取此数组并将其分解为1个数组中的较小数组以用于程序。每个小数组需要在索引0处具有“999999”,然后是$list
数组中的接下来的2个项目,然后是$list
数组中的相同2个项目,但是{{1}最后,创建一个文件名。所以最终的结果是这样的:
.pdf
原始列表数组有时最多可包含100个值。实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
您可以使用array_splice
在每次迭代时删除2个元素并构建结果数组。这样的事情:
$list = array('item1','item2','item3','item4','item5','item6');
$result = array();
while (!empty($list)) {
$array = array_splice($list, 0, 2);
if (count($array) == 2) {
$result[] = array(999999, $array[0], $array[1], $array[0] . ".pdf", $array[1] . ".pdf");
} else {
$result[] = array(999999, $array[0], '', $array[0] . ".pdf", '');
}
}
var_dump($result);
答案 1 :(得分:1)
首先,请查看array_chunk()
。
您可以使用一些自定义代码将静态元素(999999
,*.pdf
)添加到结果中。但在那时,像 Mathieu Imbert 提供的解决方案是更好的选择。
注意: PHP有超过一百array functions。学习这些将使你成为better PHP developer。
答案 2 :(得分:0)
您还可以使用each
和正常的while循环:
// solution without an array_* function
$newList = array();
while((list(,$a) = each($list)) && (list(,$b) = each($list))) {
$newList[] = array(999999, $a, $b, "$a.pdf", "$b.pdf");
}
print_r($newList);
或根本没有循环(需要PHP> = 5.3):
$newList = array_map(function($e) {
return array(999999, $e[0], $e[1], "{$e[0]}.pdf", "{$e[1]}.pdf");
}, array_chunk($list, 2));
print_r($newList);