У меня есть код, проходящий через массив, и если его элемент имеет число больше 1, копирует этот элемент на столько элементов, сколько qty, а затем устанавливает qty из всех из них до 1 (и делает несколько других изменений.)Невозможно изменить значение элемента массива
Я долго смотрел на это, и я уверен, что я должен упустить что-то очевидное, потому что я не могу на всю жизнь я получаю его, чтобы изменить значения, которые я хочу изменить.
Вот основной код:
foreach ($items as $id => $itm) {
// if there's an item that has a qty > 1, need to split out into multiple nodes with qty = 1
if ($itm['qty'] > 1) {
$qtyCount = $itm['qty'];
$newItems = array_fill($id, $qtyCount, $itm);
foreach ($newItems as $newId => $n) {
$n['qty'] = 1;
$n['deal_id'] = $newId;
}
error_log("new items");
error_log(print_r($newItems,1));
}
}
То, что я хотел бы начать с массив, который выглядит следующим образом:
[items] => Array
(
[0] => Array
(
[product] => AW8B
[qty] => 1
[subtotal] => 6.500
[deal_id] =>
)
[1] => Array
(
[product] => C
[qty] => 3
[subtotal] => 30.000
[deal_id] => 1
)
[2] => Array
(
[product] => QUEPAP
[qty] => 1
[subtotal] => 4.000
[deal_id] =>
)
)
В этом случае единственный элемент 1 в исходных элементов массива отвечает критерии qty> 1, поэтому код должен создать новый массив, содержащий три одинаковых элемента для начала. Затем цикл foreach($newItems as $newId => $n)
должен пройти через новый 3-элементный массив и установить элемент qty для каждого из них 1 и элемент deal_id в индекс цикла. Я бы ожидал, что возвращаемая строка error_log(print_r($newItems,1))
будет выглядеть следующим образом.
[newItems] => Array
(
[1] => Array
(
[product] => C
[qty] => 1
[subtotal] => 30.000
[deal_id] => 1
)
[2] => Array
(
[product] => C
[qty] => 1
[subtotal] => 30.000
[deal_id] => 2
)
[3] => Array
(
[product] => C
[qty] => 1
[subtotal] => 30.000
[deal_id] => 3
)
)
Однако остается кол-во 3 и deal_id остается 1 для всех из них, даже после того, как внутренняя foreach
петля работать. Это подталкивает меня к стене, потому что я не новичок и раньше делал это. Просто не могу для жизни меня выяснить, что я делаю неправильно здесь.