有效转换数组(PHP)

时间:2011-10-19 10:51:00

标签: php arrays

编辑:感谢@Felix Kling和@mario将我指向命名捕获群组和PREG_SET_ORDER,我今天完全学到了一些东西。

但是,我对一个更好的算法本身感到好奇。所以请假装没有涉及preg_match()

编辑2:抽象问题


在回答这里的另一个问题时,我偶然发现了我的代码转向

这样:

Array
(
    [0] => Array (
        [0] => 1
        [1] => 3
    )

    [1] => Array (
        [0] => Description text
        [1] => Different Description text
    )

    [2] => Array (
        [0] => 123.456.12
        [1] => 234.567.89
    )

    [3] => Array (
        [0] => 10.00
        [1] => 10.00
    )

    [4] => Array (
        [0] => 10.00
        [1] => 30.00
    )
)

进入那个:

Array
(
    [0] => Array
    (
        [qty] => 1
        [description] => "Description text"
        [sku] => 123.456.12
        [price] => 10.00
        [total] => 10.00
    )
    …
)

很难看:

$field_names = array('qty', 'description', 'sku', 'price', 'total');
$result_arr = array();    
$num_iter = count(matches[0]);

for ($i = 0; $i < $num_iter; $i++) {
    foreach ($field_names as $index => $field_name) {
        $result_arr[$i][$field_name] = array_shift($input_arr[$index]);
    }
}

有任何改进建议吗?

1 个答案:

答案 0 :(得分:1)

有一种更简单的方法可以产生所需的输出。

 while (count($input_arr[0])) {
     $values = array_map("array_shift", & $input_arr);
     $result_arr[] = array_combine($field_names, $values);
 }

这不会超过PHP 5.3,因为它需要通过引用强制传递参数。 (在这里避免任何令人讨厌的语言评论)。但是,您当然可以随时使用更精细的手动循环来切断条目。

然而,这种情况的真正简化是array_combine将列表转换为关联数组。