2016-06-13 16 views
4

私の問題です。私は連想配列を持ち、キーが関数に渡されたアイテムオブジェクトのアイテムIDと一致するようにします。アイテムIDキーが配列にまだ存在しない場合は、カートの配列にアイテムIDをキーとして追加し、キー値として新しい配列["Item"=>$item,"Quantity=>1]を追加したいとします。Php連想配列値の挿入、間違ったキー表示

キーがすでに存在する場合は、カートの配列にアイテムIDをインデックス付けすることで取得される配列に格納されている数量を更新したいだけです。

以下は私が(Cart.class.phpにある)これらの結果を生み出すだろうと思ったことを持っているコードである。

private $cart_items = array(); 

    public function add_to_cart($item, $quantity = 1){ 
    if(!isset($item) || !isset($item->ItemID)){ 
     throw new Exception("Error adding item to cart"); 
    } 
    if(!array_key_exists($item->ItemID,$this->cart_items)){ 
     $this->cart_items[$item->ItemID] = array("Item"=>$item,"Quantity"=>$quantity); 
    }else{ 
     $this->cart_items[$item->ItemID]["Quantity"] += $quantity; 
    } 
    $this->number_of_cart_items+=$quantity; 
} 

しかし、var_dump($this->cart_items)を使用する場合は、以下が出力され:

array(2){ 
    [ 
     0 
    ] => NULL [ 
     1 
    ] => array(2) { 
     [ 
     "Item" 
     ]  => object(stdClass)#2 (8)  { 
     [ 
      "ItemID" 
     ]   => int(11)   [ 
      "ItemName" 
     ]   => string(18) "Kids check T-Shirt"   [ 
      "ShortDescription" 
     ]   => string(20) "A kids check T-Shirt"   [ 
      "LongDescription" 
     ]   => string(51) " A kids check T-shirt perfect for formal occasions!"   [ 
      "ItemPrice" 
     ]   => float(33.59)   [ 
      "ImagePath" 
     ]   => string(51) "kozzi-26129586-1591x2387.jpg"   [ 
      "QuantityAvailable" 
     ]   => int(100)   [ 
      "ItemSupplier_SupplierID" 
     ]   => int(1) 
     }  [ 
     "Quantity" 
     ]  => int(1) 
    } 
} 

私は、$item->ItemIDが連想配列のキーとして使用されていないことを認識しています(最初のものがnullの場合、キーは[0] [1]です。を使用しています)。 私の質問は私は何ですか?間違っている、なぜidが配列のキーとして使われていないのですか?

おかげ

+0

を参照してくださいはいadd_to_cart機能 – Terminus

+0

内部からのvar_dump($アイテム)を行いますが、私はアイテムIDもcart_items連想配列のインデックスであることをことをしたいと思います。 – Eladian

+1

私は$ itemのvar_dumpを意味し、ここに結果を投稿します – Terminus

答えて

-2

あなたは(文字列)$アイテム - >アイテムIDを試したことがありますか?私が間違っていない場合、連想配列キーは文字列でなければなりません。それ以外の場合は、キーではなく配列インデックスを使用しています。

+0

あなたは間違っています – Terminus

0

コードは問題なく機能します。

class Cart{ 

    private $cart_items = array(); 
    private $number_of_cart_items; 

    public function add_to_cart($item, $quantity = 1){ 
     if(!isset($item) || !isset($item->ItemID)){ 
      throw new Exception("Error adding item to cart"); 
     } 
     if(!array_key_exists($item->ItemID,$this->cart_items)){ 
      $this->cart_items[$item->ItemID] = array("Item"=>$item,"Quantity"=>$quantity); 
     }else{ 
      $this->cart_items[$item->ItemID]["Quantity"] += $quantity; 
     } 
     $this->number_of_cart_items+=$quantity; 
     return $this->cart_items; 
    } 
} 


$itemArray = array(
    "ItemID" => 11, 
    "ItemName" => "Kids check T-Shirt", 
    "ShortDescription" => "A kids check T-Shirt", 
    "LongDescription"=>"A kids check T-shirt perfect for formal occasions!", 
    "ItemPrice" => 33.59, 
    "ImagePath" => "kozzi-26129586-1591x2387.jpg", 
    "QuantityAvailable" => 100, 
    "ItemSupplier_SupplierID" => 1 
); 
$quantity = 1; 
$item = (object)$itemArray ; 


$cart = new Cart(); 
$add_to_cart = $cart->add_to_cart($item,$quantity); 


print_r($add_to_cart);  
var_dump($add_to_cart); 

https://3v4l.org/N96Vc

+0

'add_to_cart()'関数に渡されるパラメータは**配列ではありません**; OPが言ったように、それは* "item object passed" *です。説明を慎重に読んでください! –

+1

関数に渡す前に、配列をオブジェクトに変換しています.kindly $ item =(object)$ itemArray; @GergelyLukacsy – zakhefron

+0

ああ、見て... +1! –

関連する問題