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 функция выше. Пробовал разные способы, но до сих пор не могу сообразить путь. И можем ли мы поместить эти функции в класс?

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

1

Решение

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

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'));
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector