У меня ниже $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
функция выше. Пробовал разные способы, но до сих пор не могу сообразить путь. И можем ли мы поместить эти функции в класс?
Любой совет приветствуется!
Первое, что приходит на ум, — это создать еще два ключа в массиве, в котором будут храниться необходимые значения. Третий аргумент содержит начальное значение. Что-то вроде этого:
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'));
Других решений пока нет …