按公共值对多维数组进行排序和合并

时间:2018-04-25 20:38:37

标签: php arrays sorting multidimensional-array

我有一个多维数组,我试图按照一个特定键的常用值对其进行排序,在我的情况下 name

我已经尝试使用foreach循环到数组中,或者使用usort,但我找不到这样做的方法。

注意“Diamètre”键的值如何在最终结果中合并为一个数组。

Array
(
    [0] => Array
        (
            [0]  => Array
                (
                    [name]  => Diamètre
                    [value]  => 5                   
                )

            [1]  => Array
                (
                    [name]  => Force
                    [value]  => 30                  
                )

        )

    [1]  => Array
         (

            [0]  => Array
                (
                    [name]  => Force
                    [value]  => 20             
                )

            [1]  => Array
                (
                    [name]  => Poids
                    [value]  => 50         
                )
          )
     [2]  => Array
         (
            [0]  => Array
                (
                    [name]  => Diamètre
                    [value]  => 40
                )

            [1]  => Array
                (
                    [name]  => Largeur
                    [value]  => 40
                )

          )
)

预期结果:

Array
(

            [0]  => Array
                (
                    [name]  => Diamètre
                    [value]  => Array (5, 40)                                                              
                )

            [1]  => Array
                (
                    [name]  => Force
                    [value]  => Array (30, 20)               
                )

             [2]  => Array
                 (
                    [name]  => Poids
                    [value]  => 50        
                 ) 

             [3]  => Array
               (
                    [name]  => Largeur
                    [value]  => 40
                )     
)

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方式:

$result = [];

foreach($array1 as $array2) {
    foreach($array2 as $item) {

        if(array_key_exists($item['name'], $result)) {
            $newItem = $result[$item['name']];

            $valueArray = (array) $item['value'];
            $newValueArray = (array) $newItem['value'];

            $newItem['value'] = array_merge($valueArray, $newValueArray);
        } else {
            $newItem = $item;
        }

            $result[$item['name']] = $newItem;
    }
}

// In case you don't want an associative array.
$result = array_values($result);