1

我有以下数组:

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

我需要把这个数组分解成1个数组内的更小的数组,用于一个程序。每个小数组需要在索引 0 处有 '999999',然后是数组中的下 2 项$list,然后是数组中相同的 2 项$list,但.pdf最后是创建文件名。所以最终的结果是这样的:

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

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

4

3 回答 3

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);
于 2012-09-06T17:37:48.913 回答
1

作为一个开始,看看array_chunk()

您可以使用一些自定义代码将静态元素 ( 999999, ) 添加到结果中。*.pdf但在这一点上,像Mathieu Imbert提供的解决方案是一个更好的选择。

注意: PHP 有一百多个数组函数。学习这些将使您成为更好的 PHP 开发人员

于 2012-09-06T17:36:00.953 回答
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);       
于 2012-09-06T17:45:03.967 回答