如果一个索引相同而另一个索引不同,则用逗号合并关联数组

Merge an associative array with comma if one index is same and other is different

我有一个这样的数组:

Array
(
    [0] => Array
        (
            [id] => 10
            [field] => new
            [value] => pqr
        )
    [1] => Array
        (
            [id] => 14
            [field] => test
            [value] => abc
        )

    [2] => Array
        (
            [id] => 17
            [field] => test
            [value] => xyz
        )

)

现在我想将这个数组与带有 id 的字段名称合并,值将以逗号分隔。所以我的新数组看起来像:

Array
(
    [0] => Array
        (
            [id] => 10
            [field] => new
            [value] => pqr
        )
    [1] => Array
        (
            [id] => 14,17
            [field] => test
            [value] => abc,xyz
        )
)

我们可以使用任何 php 内置函数来做到这一点吗?

我不知道有任何内置函数可以执行此操作,但是使用一个简单的 foreach 循环就非常简单了。

字符串连接方法

$new_array = [];
foreach($array1 as $arr) {
    
    $field = $arr['field'];
    $id = $arr['id'];
    $value = $arr['value'];
    
    //we use $field as $new_array keys so we can combine values
    if(!array_key_exists($field, $new_array)) {
        
        //key doesn't exist in new array, so create it
        $new_array[$field] = $arr;
        
    } else {
    
        //key exists in new array, append new values
        $new_array[$field]['id'] .= ",{$id}";
        $new_array[$field]['value'] .= ",{$value}";
    
    }
    
}

//reset array keys back to sequential
$new_array = array_values($new_array);

$new_array 的输出将是

Array
(
    [0] => Array
        (
            [id] => 10
            [field] => new
            [value] => pqr
        )

    [1] => Array
        (
            [id] => 14,17
            [field] => test
            [value] => abc,xyz
        )

)

归一化数组方法

$new_array = [];
foreach($array1 as $arr) {
    
    $field = $arr['field'];
    $id = $arr['id'];
    $value = $arr['value'];
    
    //we use $field as $new_array keys so we can combine values
    if(!array_key_exists($field, $new_array)) {
        
        //key doesn't exist in new array, so create it
        $new_array[$field] = ['id' => [$id], 'field' => $field, 'value' => [$value]];
        
    } else {
    
        //key exists in new array, append new values
        $new_array[$field]['id'][] = $id;
        $new_array[$field]['value'][] = $value;
    
    }
    
}

//reset array keys back to sequential
$new_array = array_values($new_array);

$new_array 的输出将是

Array
(
    [0] => Array
        (
            [id] => Array
                (
                    [0] => 10
                )

            [field] => new
            [value] => Array
                (
                    [0] => pqr
                )

        )

    [1] => Array
        (
            [id] => Array
                (
                    [0] => 14
                    [1] => 17
                )

            [field] => test
            [value] => Array
                (
                    [0] => abc
                    [1] => xyz
                )

        )

)