如果数组索引的值与其他索引的值相同,如何合并数组索引


How to merge array index if the value is same of another index?

我刚刚粘贴了我的示例输入&输出

样本输入:

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

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

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

样本输出

在代码板上直播: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);
   }
}