编辑:感谢@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]);
}
}
有任何改进建议吗?
答案 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
将列表转换为关联数组。