【问题标题】:Sort and merge a multidimensional array by common value按共同值对多维数组进行排序和合并
【发布时间】:2018-04-25 20:38:36
【问题描述】:

我有一个多维数组,我试图按一个特定键的公共值对它进行排序,在我的例子中是 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
                )     
)

【问题讨论】:

  • "我已经尝试了很多东西" 显示这些你已经尝试过的东西。
  • @GrumpyCrouton 这里似乎有一个“发生碰撞时合并数组”,但我在那个重复的目标中看不到。
  • @Marco 重要的是“Poids”和“Largeur”中的值保持为单个值,而不是仅包含一个值的数组?
  • @Félix Gagnon-Grenier 不,这不重要

标签: php arrays sorting multidimensional-array


【解决方案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);

【讨论】:

  • 这里的结果@Mkk:Array ([Diamètre] => Array ([0] => 5) [Force] => Array ([0] => 30) [Poids] => Array ([0] => 50))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 2018-03-01
  • 2012-11-25
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
相关资源
最近更新 更多