【问题标题】:Replacing an array with specific id?用特定ID替换数组?
【发布时间】:2013-12-24 18:12:04
【问题描述】:

我有这个数组:

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

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

        )

)

例如,如何在这个多维数组中替换 id 为 2 的数组?

我正在构建一个在线商店系统,并且想将 T 恤添加到购物车中。如果要再次添加已添加的文章,则应将 cart-session-variable 替换为新输入(新尺寸、新计数)。

如何检查是否已添加特定 ID?

【问题讨论】:

  • 正如我所说:新的内容,如新的大小、新的计数,但相同的 id。

标签: php arrays multidimensional-array replace


【解决方案1】:

不确定你在寻找什么,但我认为这可以做到。

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

【讨论】:

  • 首先我要检查一个特定的 id 是否在数组中。我必须做这个 foreach 循环还是可以更简单地检查它?
  • 如果您也需要修改它,这可能是最简单的方法。
  • 你为什么要unset($item);
  • 释放&$item创建的引用。 PHP 不会自动销毁它。见php.net/manual/en/control-structures.foreach.php
【解决方案2】:

假设 $cart 有 n 个产品,$article 作为新的要添加的文章:

$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;
}

【讨论】:

  • 首先我要检查一个特定的 id 是否在数组中。我必须做这个 foreach 循环还是可以更简单地检查它?
  • 你必须foreach yes,或者你必须将id设置为数组的key,然后只做array_key_exists或者简单的isset
【解决方案3】:

由于每个产品都有自己的唯一 ID,您可以使用产品 ID 作为数组中的索引,然后您可以执行以下操作:

// 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
            )

    )

其中每个索引都是一个产品 ID 号。

【讨论】:

  • 全球!而且他没有使用 id 作为键
  • 就像我说的,这只是让他知道如何进行的伪代码。另外,我说过他可以使用产品 ID 作为键。
  • 如果我使用 id 作为 key 会是什么样子?
  • @KristerAndersson 不要使用全局变量,这根本不是一个好习惯!您正在教学,请使用良好做法
  • @mcuadros - 你好像没看过我的帖子?我想展示一种方法是使用产品 ID 号作为索引。我还在我的示例中编写了pseudo 代码。而且我不认为 stackoverflow 是关于为他人编写代码的。当然你不应该像上面的例子那样使用global
猜你喜欢
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多