php循环遍历多维数组可以将相同的键/值组合到新的数组元素

时间:2017-04-28 09:34:24

标签: php arrays sorting multidimensional-array

我从mysql中获取一些数据到这样的数组

array(
    [0] = array(
        'code' => '123456',
        'title' => 'something',
        'price' => '2.00',
        'other_value' => '555555'
    ),
    [1] = array(
        'code' => '123456',
        'title' => 'something',
        'price' => '2.00',
        'other_value' => '666666'
    ),
    [2] = array(
        'code' => '234567',
        'title' => 'something else',
        'price' => '3.00',
        'other_value' => '333333'
    ),
    [3] = array(
        'code' => '345678',
        'title' => 'another thing',
        'price' => '4.00',
        'other_value' => NULL
    ),
)

我需要做的是每行,如果键代码出现多次,将行合并为一行,但为 other_value 创建一个新数组所以

array(
    [0] = array(
        'code' => '123456',
        'title' => 'something',
        'price' => '2.00',
        'other_value' => array(
            [0] => '555555',
            [1] => '666666'
        )
    ),
    [1] = array(
        'code' => '234567',
        'title' => 'something else',
        'price' => '3.00',
        'other_value' => '333333'
    ),
    [2] = array(
        'code' => '345678',
        'title' => 'another thing',
        'price' => '4.00',
        'other_value' => NULL
    ),
)

实现这一目标的最佳方法是什么?

我确实考虑过循环遍历每一行并检查是否存在thtat键/值然后执行某些操作(如果存在)。

3 个答案:

答案 0 :(得分:0)

我建议的方法是遍历数组并将code的值存储到一个新数组中,并将整个结果集存储到一个新数组中。每次迭代时,检查code值存储数组中是否存在该值。如果在那种情况下找到值,则获取code数组的键并对结果数组使用相同的键并将其存储在other_value内。希望它有意义。

答案 1 :(得分:0)

使用'代码循环数组并创建新数组'作为键的值可能是最简单的方法。在这种情况下,您可以检查密钥是否已存在。

$new_array=array();

foreach($array as $part){
  $code_as_key = $part['code'];
  //if code allready in the new array, just add a new value
  if( isset($new_array[$code_as_key]) ){
     $new_array[$code_as_key]['other_value'][] = $part['other_value'];
     }
  //else add the new code
  else{
     $new_array[$code_as_key]=$part;
     }
}
//re-index the new array, starting from key 0
$new_array=array_values($new_array);

答案 2 :(得分:0)

@AdRock我希望你想要在'代码'相同时合并数组,如果是这样的话,请尝试下面的一个:

<?php
$arr = array(
            array(
                'code' => '123456',
                'title' => 'something',
                'price' => '2.00',
                'other_value' => '555555'
            ),
            array(
                'code' => '123456',
                'title' => 'something',
                'price' => '2.00',
                'other_value' => '666666'
            ),
           array(
                'code' => '234567',
                'title' => 'something else',
                'price' => '3.00',
                'other_value' => '333333'
            ),
            array(
                'code' => '345678',
                'title' => 'another thing',
                'price' => '4.00',
                'other_value' => NULL
            )
        );
echo "<pre>";
print_r($arr);// array before
$isExist = array();
foreach($arr as $key => $value){
    if(in_array($value["code"], $isExist)){
        $getKey = array_search($value["code"], $isExist);
        $arr[$getKey]["other_value"] = array($arr[$getKey]["other_value"], $value["other_value"]);
        unset($arr[$key]);
    }
    else{
        $arr[$key] = $value;
    }
    $isExist[$key] = $value["code"];
}
echo "<pre>";
print_r(array_values($arr));// array after
?>