我有一个这样的数组:
array(
0 => array(
'name' => 'colors',
'options' => array(
array('name'=>'red', 'price'=>'2'),
array('name'=>'blue', 'price'=>'3')
)
),
1 => array(
'name' => 'sizes',
'options' => array(
array('name'=>'small', 'price'=>'5'),
array('name'=>'large', 'price'=>'10')
)
),
);
我想将所有嵌套选项数组的名称/价格合并为一个,所以它会是这样的:
array(
'red' => '2',
'blue' => '3',
'small' => '5',
'large' => '10'
);
我有一种感觉,这很简单,但我尝试的任何东西看起来都太复杂了。任何帮助将不胜感激。
...是的,我刚刚在不久前发布了几乎相同的问题。这有点不同,我首先要问的是 - 哎呀,对不起。
答案 0 :(得分:1)
我不确定是否可以使用array_merge()
,array_combine()
等内部方法来完成此操作,因为您的结构看起来非常特殊。但是如何迭代数组并自己构建一个新数组呢?
function customRearrange($arr) {
$result = array();
foreach ($arr as $group) {
foreach ($group['options'] as $option) {
// prevents values from being overwritten, uncomment if unwanted
if (!array_key_exists($option['name'], $result))
$result[ $option['name'] ] = $option['price'];
}
}
return $result;
}
答案 1 :(得分:1)
您需要决定如何处理碰撞,无论如何这里都是相同的,这将为您提供正确的方向:
$newArray = array();
foreach ($array as $i => $item)
foreach ($item['options'] as $j => $option)
$newArray[$option['name']] = $option['price'];
答案 2 :(得分:0)
这是另一种方式,假设数组已分配给变量$a
:
<?php
for ($i = 0; $i < count($a); $i++) {
$key = $a[$i]['name'];
$options = $a[$i]['options'];
for ($j = 0; $j < count($options); $j++) {
$optkey = $options[$j]['name'];
$prices[$optkey] = $options[$j]['price'];
}
}
print_r($prices);
答案 3 :(得分:0)
遍历嵌套数组中的“options”并创建一个新数组:
<?php
$arr = array(
0 => array(
'name' => 'colors',
'options' => array(
array('name'=>'red', 'price'=>'2'),
array('name'=>'blue', 'price'=>'3')
)
),
1 => array(
'name' => 'sizes',
'options' => array(
array('name'=>'small', 'price'=>'5'),
array('name'=>'large', 'price'=>'10')
)
),
);
$group = array();
foreach($arr as $a){
foreach($a['options'] as $op){
$group[$op['name']] = $op['price'];
}
}
print_r($group);
?>