Вот моя проблема. У меня есть ассоциативный массив, и я хотел бы, чтобы ключи соответствовали идентификатору элемента объекта 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()
,
У меня вопрос, что я делаю неправильно, и почему идентификаторы не используются в качестве ключей в массиве?
Спасибо
Код прекрасно работает для меня.
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
Вы пробовали (строка) $ item-> ItemID? Если я не ошибаюсь, ключи ассоциативного массива должны быть строками. В противном случае вы используете индекс массива, а не ключ.