dow56114 2018-04-25 20:38
浏览 44
已采纳

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

I have a multidimensional array and I'm trying to sort it by common value of one particular key, name in my case.

I already tried using a foreach to loop into the array, or using usort, but I just can't find the way to do it.

Notice how the values of the "Diamètre" key are merged into an array in the final result.

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
                )

          )
)

Expected result :

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条回答 默认 最新

  • dongying9756 2018-04-25 20:55
    关注

    You could try something along the lines of:

    $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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?