cmd — изменения массива PHP не сохранятся

Почему мой массив не обновляется.
Допустим, я храню 2 предмета: «Обувь и рубашку», и получаю что-то вроде этого.

Array
(
[0] => Array
(
[item_id] => 1
[item_name] => shoes
[item_price] => 10
[item_quantity] => 10
)

[1] => Array
(
[item_id] => 2
[item_name] => Shirt
[item_price] => 5
[item_quantity] => 5
)

)

И это нормально. Но если я передаю 1 и 4 в функцию getItem, она отображает оставшиеся элементы, как и должно быть, в данном случае 6, но если я проверяю массив $ inventoryItems, он все равно говорит, что есть 10 ботинок. И если я снова пройду 1 и 4, это даст тот же результат, 6, но он должен вернуть 2.

class Inventory{
public $inventoryItems = [];

public function storeItem($item){
$this->inventoryItems[] = [
'item_id' => $item->itemId,
'item_name' => $item->itemName,
'item_price' => $item->itemPrice,
'item_quantity' => $item->itemQuantity
];

}

public function inventoryList(){
print_r($this->inventoryItems);
}

public function getItem($itemId, $itemQuantity){
foreach($this->inventoryItems as $inventoryItem){
if($inventoryItem['item_id'] === $itemId && $inventoryItem['item_quantity'] > 0){
$inventoryItem['item_quantity'] -= $itemQuantity;
echo $inventoryItem['item_quantity'] . ' ' .
$inventoryItem['item_name'] . " remaining. \n";
}
}
}

}

0

Решение

foreach($this->inventoryItems as $inventoryItem){

создает копия каждого inventoryItem и хранить его в $inventoryItem, Вы можете изменить это на:

foreach($this->inventoryItems as &$inventoryItem){

получить ссылку на инвентарь предмета, и тогда изменения произойдут в оригинале.

1

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

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

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