如果值与另一个索引相同,如何合并数组索引?

时间:2014-11-10 13:29:32

标签: php arrays

我只是粘贴了我的示例输入&输出

示例输入:

Array
(
    [0] => Array
        (
            [id] => 1
            [msisdn] => 10
            [sc] => 8155
        )

    [1] => Array
        (
            [id] => 2
            [msisdn] => 20
            [sc] => 22020
        )

    [2] => Array
        (
            [id] => 3
            [msisdn] => 10
            [sc] => 8155
        )

    [3] => Array
        (
            [id] => 4
            [msisdn] => 10
            [sc] => 8155
        )

    [4] => Array
        (
            [id] => 5
            [msisdn] => 20
            [sc] => 22020
        )

    [5] => Array
        (
            [id] => 6
            [msisdn] => 30
            [sc] => 22020
        )

)

示例输出:

Array
(
    [0] => Array
        (
            [id] => 1,3,4
            [msisdn] => 10
            [sc] => 8155
        )

    [1] => Array
        (
            [id] => 2,5
            [msisdn] => 20
            [sc] => 22020
        )

    [2] => Array
        (
            [id] => 6
            [msisdn] => 30
            [sc] => 8155
        )

)

2 个答案:

答案 0 :(得分:1)

只需将该特定值设为键,然后在已经推送/存在时连接:

$new_array = array();
foreach ($array as $value) {
    if(!isset($new_array[$value['msisdn']])) {
        // if not yet pushed, just initialize
        $new_array[$value['msisdn']] = $value;
    } else {
        // if already inside, then just concatenate
        $new_array[$value['msisdn']]['id'] .= ', ' . $value['id'];
    }
}

$new_array = array_values($new_array);
echo '<pre>';
print_r($new_array);

Sample Output

答案 1 :(得分:0)

在键盘上生活:http://codepad.org/0fw9k2w9

您可以使用PHP数组中的哈希映射这一事实。通过创建一个中间数组,您可以在O(n)时间内解决这个问题。

$merged = array();

foreach($array as $v) {
    $merged[$v['msisdn']][$v['sc']] [] = $v['id'];
}


$final = array();
foreach($merged as $msisdn=>$v) {
   foreach($v as $sc=>$ids) {
       $final [] = array('msisdn'=>$msisdn,'sc'=>$sc,'id'=>$ids);
   }
}
相关问题