将具有相同值的数组元素放入一个元素中并连接它们的键

Put array elements with the same value into one element and concatenate their keys

我正在尝试 merge/append 包含相同值的数组键。

我有一个这样的数组:

$array = array(
           '12' => 'Coats',
           '23' => 'Coats',
           '45' => 'Brushs',
           '5'  => 'others',
           '7'  => 'None',
           '8'  => 'None',
           '9'  => 'None',
         );

预期输出为:

$array = array(
           '12,23' => 'Coats',
           '45' => 'Brushs',
           '5' => 'others',
           '7,8,9' => 'None'
         );

我的尝试:

$subFinalFinal = array();

foreach($array as $key => $val){
    if($skey = array_search($val, $subFinalFinal)){ //duplicate value
        $subFinalFinal[$key.','.$skey] = $val;
    } else {
        $subFinalFinal[$key] = $val;
    }

}

但它没有给我预期的结果:

Array
(
    [182] => Coats & Jackets
    [211,182] => Coats & Jackets
    [45] => Brushs 
    [5] => others
    [7] => None
    [7,8] => None
    [7,9] => None

)

这应该适合你:

只需使用 foreach 循环遍历您通过 array_unique() 获得的所有唯一值。这里是这样的:

Array
(
    [0] => Coats
    [1] => Brushs
    [2] => others
    [3] => None
)

并获取所有键,这些键保存 array_keys() 的唯一值。本例中的意思是:

     value     |        key(s)
--------------------------------------
     Coats     |     Array (12, 23)
     Brushs    |     Array (45)
     others    |     Array (5)
     None      |     Array (7, 8, 9)

然后您可以implode()将您的键数组转换为字符串并将其用作键。

代码:

<?php

    $array = array('12' => 'Coats', '23' => 'Coats', '45' => 'Brushs', '5' => 'others', '7' => 'None', '8' => 'None', '9' => 'None', );
    $result = [];

    foreach(array_unique($array) as $uniqueValue)
        $result[implode(",", array_keys($array, $uniqueValue))] = $uniqueValue;

    print_r($result);


?>

输出:

Array
(
    [12,23] => Coats
    [45] => Brushs
    [5] => others
    [7,8,9] => None
)

您可以将array_flip用作

$res = array_flip($array);
foreach($res as $k =>$v) $res[$k] = implode(", ", array_keys($array, $k));
print_r(array_flip($res));

输出:

Array
(
    [12,23] => Coats
    [45] => Brushs
    [5] => others
    [7,8,9] => None
)