2012-05-17 3 views
0

У меня возникла проблема, которая немного раздражает. Вот мой PHP-код. Игнорировать, откуда происходят переменные. Это для функциональности корзины покупок, но оно применимо во многих разных областях.Правильный способ ввода значений в массив PHP?

$data_set = json_decode(stripslashes($_POST['varA']), true); 
$pid = $pid['product_id']; 
$quantity = $pid['quantity']; 

$_SESSION['cartid'] = $_SESSION['cartid'] + 1; 

$product_data = array("Product_ID" = > $pid, "quantity" = > $quantity, "cartid" = > $_SESSION['cartid']); 

Моя проблема возникает в этом месте в коде. Сначала я проверяю, имеет ли переменная Session значение в ней, если нет, то она начинает создавать ассоциативный массив.

if (empty($_SESSION['cart_items'])) { 
    $_SESSION['cart_items'] = array("items" = > $product_data); 
} else { 
    array_push($_SESSION['cart_items']['items'], $product_data); 
} 


echo json_encode($_SESSION['cart_items']); 

Конечный результат после того, как первый элемент "добавлен" выглядит следующим образом:

{ 
    "items": { 
     "Product_ID": "2", 
     "quantity": "1", 
     "cartid": 1 
    } 
} 

Однако после нескольких первых оного, каждое значение получает ключ:

{ 
    "items": { 
     "0": { 
      "Product_ID": "2", 
      "quantity": "1", 
      "cartid": 2 
     }, 
     "1": { 
      "Product_ID": "2", 
      "quantity": "1", 
      "cartid": 3 
     }, 
     "Product_ID": "2", 
     "quantity": "1", 
     "cartid": 1 
    } 
} 

Как предотвратить появление этих ключей? Это возможно? Если нет, как это можно переписать так, чтобы ключи добавлялись каждый раз? И разве это возможно разобрать и проскочить в JS на лицевой стороне?

Извините, у меня так много вопросов. Любая помощь действительно ценится.

+1

Что вы хотите, чтобы это выглядело вместо этого? – deceze

ответ

1

В первой итерации $_SESSION['cart_items'] пуст, так что вы запустите это:

$_SESSION['cart_items'] = array("items" => $product_data); 

Это создает $_SESSION['cart_items']['items'] но заполнить его только продукт сам по себе; Вы должны определить его как массив вместо:

$_SESSION['cart_items'] = array("items" => array($product_data)); 

Это создает массив с одним элементом, который впоследствии можно расширить с array_push.

Сказав это, вы можете заменить все условия только с:

$_SESSION['cart_items']['items'][] = $product_date; 

PHP автоматически создаст пустой массив, если он еще не существует, с последующим добавлением данных продукта в качестве следующего элемента.

+0

Вы правы. Вау. Это одна строка. Большое спасибо :) – TaylorMac

0

Это из-за этой линии:

$_SESSION['cart_items'] = array("items" = > $product_data); 

Вы по существу сказать, в этой строке, что ключ «пункты» есть данные о продукте, а ключ в деталях. Это должно быть:

$_SESSION['cart_items']['items'] = array($product_data); 

Ключи -will- всегда возникают, если вы не хотите, чтобы данные перезаписывали другой. Если вам не нужны ключи (0,1 и т. Д.), Единственным единственным вариантом является объединение данных. В этом случае это будет:

$ _SESSION ['cart_items'] ['items'] + = $ product_data;

.. но я не думаю, что это то, что вы хотите.

0

Вам не нужен items, попробуйте ниже.

if (empty($_SESSION['cart_items'])) { 
    $_SESSION['cart_items'] = array($product_data); 
} else { 
    $_SESSION['cart_items'][] = $product_data; 
} 
Смежные вопросы