0

我有一个这样的数组:

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'
);

我觉得这很简单,但是我尝试的任何事情似乎都太复杂了。任何帮助,将不胜感激。

...是的,不久前我刚刚发布了几乎相同的问题。这有点不同,我首先要问的是什么 - 哎呀,对不起。

4

4 回答 4

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;
}
于 2013-11-12T23:11:47.230 回答
1

您需要决定如何处理碰撞,无论如何这里都是一样的,这将为您提供正确的方向:

$newArray = array();
foreach ($array as $i => $item)
    foreach ($item['options'] as $j => $option)
        $newArray[$option['name']] = $option['price'];
于 2013-11-12T23:13:19.973 回答
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);
于 2013-11-12T23:28:08.190 回答
0

遍历嵌套数组中的“选项”并创建一个新数组:

<?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);

?>
于 2013-11-14T06:27:01.180 回答