使用新值将一维数组修改为二维

时间:2012-09-06 17:31:56

标签: php

我有以下数组:

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

我需要获取此数组并将其分解为1个数组中的较小数组以用于程序。每个小数组需要在索引0处具有“999999”,然后是$list数组中的接下来的2个项目,然后是$list数组中的相同2个项目,但是{{1}最后,创建一个文件名。所以最终的结果是这样的:

.pdf

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

3 个答案:

答案 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);