Расчеты в многомерном массиве - PullRequest
0 голосов
/ 05 августа 2020

У меня есть массив, который содержит подэлементы, у которых есть несколько экземпляров одного и того же элемента с разным количеством:

Пример массива:

Array
(
    [7] => Array
        (
            [id] => 11399
            [groupid] => 18
            [name] => Morphite
            [quantity] => 150
        )

    [8] => Array
        (
            [id] => 16673
            [groupid] => 429
            [name] => Fernite Carbide
            [quantity] => 44
        )

    [9] => Array
        (
            [id] => 16678
            [groupid] => 429
            [name] => Sylramic Fibers
            [quantity] => 11
        )

    [10] => Array
        (
            [id] => 16673
            [groupid] => 429
            [name] => Fernite Carbide
            [quantity] => 17
        )

    [11] => Array
        (
            [id] => 16680
            [groupid] => 429
            [name] => Phenolic Composites
            [quantity] => 6
        )

    [12] => Array
        (
            [id] => 33361
            [groupid] => 429
            [name] => Plasmonic Matamaterials
            [quantity] => 2
        )

    [13] => Array
        (
            [id] => 16681
            [groupid] => 429
            [name] => Nanotransistors
            [quantity] => 2
        )

    [14] => Array
        (
            [id] => 16673
            [groupid] => 429
            [name] => Fernite Carbide
            [quantity] => 22
        )

)

Я хочу добавить все элементы с одинаковым именем / идентификатором вместе, чтобы я мог отображать одну строку с нужным количеством.

1 Ответ

4 голосов
/ 05 августа 2020

Довольно просто сделать с al oop.

//create new array to hold new array format
$new_array = [];

//loop through old array
foreach($old_array as $value) {
    
    //check if $value['id'] key exists in `$new_array`
    if(!array_key_exists($value['id'], $new_array)) {

        //if key does not exist, create it
        $new_array[$value['id']] = $value;

    } else {

        //if key does already exist, increment quantity
        $new_array[$value['id']]['quantity'] += $value['quantity'];

    } 


}

Вывод из вашего примера массива:

Array
(
    [11399] => Array
        (
            [id] => 11399
            [groupid] => 18
            [name] => Morphite
            [quantity] => 150
        )

    [16673] => Array
        (
            [id] => 16673
            [groupid] => 429
            [name] => Fernite Carbide
            [quantity] => 83
        )

    [16678] => Array
        (
            [id] => 16678
            [groupid] => 429
            [name] => Sylramic Fibers
            [quantity] => 11
        )

    [16680] => Array
        (
            [id] => 16680
            [groupid] => 429
            [name] => Phenolic Composites
            [quantity] => 6
        )

    [33361] => Array
        (
            [id] => 33361
            [groupid] => 429
            [name] => Plasmonic Matamaterials
            [quantity] => 2
        )

    [16681] => Array
        (
            [id] => 16681
            [groupid] => 429
            [name] => Nanotransistors
            [quantity] => 2
        )

)

Если вы хотите, чтобы ключи в этом выходном массиве были последовательными числами по какой-то причине вы можете добиться этого, используя array_values($new_array) после l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...