Сортировать и объединять многомерный массив по общему значению - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть многомерный массив, и я пытаюсь отсортировать его по общему значению одного конкретного ключа, 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 голосов
/ 25 апреля 2018

Вы можете попробовать что-то вроде:

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...