2013-12-07 3 views
0

У меня есть этот массив:Замена массива на определенный идентификатор?

Array 
(
    [cart] => Array 
     (
      [0] => Array 
       (
        [id] => 1 
        [size] => XS 
        [count] => 1 
       ) 

      [1] => Array 
       (
        [id] => 2 
        [size] => XS 
        [count] => 1 
       ) 

     ) 

) 

Как я могу заменить массив с идентификатором 2 в этом многомерном массиве, например?

Я строю интернет-магазин и хочу добавить футболки в корзину. Если добавленная статья будет добавлена ​​снова, она должна заменить переменную cart-session новым вводом (новый размер, новый счетчик).

И как я могу проверить, был ли добавлен конкретный идентификатор?

+0

заменить на что? – sravis

+0

Как я уже сказал: с новым контентом, как новый размер, новый счетчик, но тот же идентификатор. – AlexioVay

ответ

0

Поскольку каждый продукт имеет свой собственный уникальный идентификатор, вы можете использовать идентификатор продукта в качестве индекса в массиве, то вы могли бы сделать что-то вроде этого:

// pseudo code 
function add2Cart($product_id, $count, $size) { 
    global $cart; 
    $cart[$product_id] = array(
     'count' => $count, 
     'size' => $size 
    ); 
) 

Тогда вы бы массив, похожий на:

[cart] => Array 
    (
     [1] => Array 
      (
       [size] => XS 
       [count] => 1 
      ) 

     [2] => Array 
      (
       [size] => XS 
       [count] => 1 
      ) 

    ) 

Где каждый индекс является идентификационным номером продукта.

+1

Global! И он не использует id как ключ – mcuadros

+0

Как я уже сказал, это всего лишь псевдокод, чтобы дать ему представление о том, как действовать. Кроме того, я сказал, что он ** мог ** использовать идентификатор продукта в качестве ключа. – Cyclonecode

+0

Как бы это выглядело, если я использую идентификатор в качестве ключа? – AlexioVay

1

Учитывая $ Корзина с п продуктов и $ статье в качестве новой статьи добавить:

$c = count($cart); 
for($i=0;$i<$c;$i++) { 
    if ($cart[$i]['id'] == $article['id']) { 
     $cart[$i] = $article; 
    } 
} 

Если и использовать product_id в качестве ключа только

if (isset($cart[$article['id']]) { 
    $cart[$article['id']] = $article; 
} 
+0

Сначала я должен проверить, есть ли в массиве определенный идентификатор. Должен ли я делать это foreach-loop или я могу проверить его проще? – AlexioVay

+0

Вы должны предвидеть да, или вы должны установить id как ключ массива, а затем просто сделать array_key_exists или просто isset – mcuadros

1

Не уверен, что именно то, что ищете, но Я думаю, что это будет сделано.

foreach ($array['cart'] as &$item) { 
    if ($item['id'] == $_POST['id']) { 
     $item = $_POST; 
    } 
} unset($item); 
+0

Сначала я должен проверить, находится ли конкретный идентификатор в массиве. Должен ли я делать это foreach-loop или я могу проверить его проще? – AlexioVay

+0

Это, вероятно, самый простой способ, если вам тоже нужно его изменить. – Rob

+0

Почему вы 'unset ($ item);' – user2907171

Смежные вопросы