Вставка значения ассоциативного массива php, неправильное отображение ключа

Вот моя проблема. У меня есть ассоциативный массив, и я хотел бы, чтобы ключи соответствовали идентификатору элемента объекта item, переданного в функцию. Если ключ идентификатора элемента еще не существует в массиве, я хотел бы добавить в массив корзины идентификатор элемента в качестве ключа вместе с новым массивом. ["Item"=>$item,"Quantity=>1] в качестве значения ключа.

Если ключ уже существует, я просто хотел бы обновить количество, хранящееся в массиве, которое будет извлечено путем индексации массива корзины с помощью идентификатора элемента.

Ниже приведен код, который, как я думал, даст эти результаты (находится в 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 не используется в качестве ключа для ассоциативного массива (вы можете видеть, что ключи [0] [1], причем первый равен нулю, хотя я использую $this->cart_items[$item->ItemID] = array(),
У меня вопрос, что я делаю неправильно, и почему идентификаторы не используются в качестве ключей в массиве?

Спасибо

4

Решение

Код прекрасно работает для меня.

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

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

Вы пробовали (строка) $ item-> ItemID? Если я не ошибаюсь, ключи ассоциативного массива должны быть строками. В противном случае вы используете индекс массива, а не ключ.

-2

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