array_reduce для использования динамических переменных, передаваемых во вторую функцию

У меня ниже $test массив

        Array
(
    [0] => Array
        (
            [quantity] => 3
            [stock_id] => _PHONE
        )

    [1] => Array
        (
            [quantity] => 3
            [stock_id] => 102
        )

    [2] => Array
        (
            [quantity] => 4
            [stock_id] => _PHONE
        )

    [3] => Array
        (
            [quantity] => 3
            [stock_id] => 102
        )

    [4] => Array
        (
            [quantity] => 4
            [stock_id] => _PHONE
        )

    [5] => Array
        (
            [quantity] => 6
            [stock_id] => _PHONE
        )

    [6] => Array
        (
            [quantity] => 2
            [stock_id] => 102
        )

)

и для суммирования одних и тех же ключей stock_id к одному, я использую следующие функции:

function sum($array, $key){
    isset($array[$key['stock_id']]) ? $array[$key['stock_id']]['quantity'] += $key['quantity'] : $array[$key['stock_id']] = $key;  
    return $array;
};

//merge same stock_id and sum the quantity same stock id
$sum_same_stock_id = array_reduce($test, "sum"); 

и результат прошел хорошо, как показано ниже:

$ Sum_same_stock_id:

Array
(
    [_PHONE] => Array
        (
            [quantity] => 17
            [stock_id] => _PHONE
        )

    [102] => Array
        (
            [quantity] => 8
            [stock_id] => 102
        )

)

Таким образом, вопрос здесь заключается в том, что я хотел передать динамические ключи значения, а не только фиксированные значения stock_id & quantity в sum функция выше. Пробовал разные способы, но до сих пор не могу понять путь. И можем ли мы поместить эти функции в класс?

Любой совет приветствуется!

2 ответа

Первое, что приходит на ум, - это создать еще два ключа в массиве, в котором будут храниться необходимые значения. Третий аргумент содержит начальное значение. Что-то вроде этого:

function sum($array, $key){
        isset($array[$key['stock_id']]) ? $array[$key[$array['select']]][$array['sum']] += $key[$array['sum']] : $array[$key[$array['select']]] = $key;  
        return $array;
    };

    //merge same stock_id and sum the quantity same stock id

    $sum_same_stock_id = array_reduce($test, "sum", array('select'=>'stock_id', 'sum' => 'quantity')); 

Может быть, вы можете использовать функцию «использовать» для обратного вызова?

См. https://www.php.net/manual/en/functions.anonymous.php

Другие вопросы по тегам