PHP数组更改不会存储

时间:2018-04-13 22:38:10

标签: php cmd

为什么我的阵列没有更新。 让我们说我存放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";
        }
    }
}

}

1 个答案:

答案 0 :(得分:1)

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

正在创建每个inventoryItem副本并将其存储在$inventoryItem中。您可以将其更改为:

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

获取对库存项目的引用,然后更改将在原始项目中进行。