[英]how $i++ is used here to find index of the correct array element
如果购物车数组为空,则将其商品ID和显示数量的商品设为1。 如果不是,它进入foreach循环,并且该项目已经在数组中,则array_splice在那里发生。 $ i ++和$ i-1的偏移位置在这里如何工作。 逻辑是什么
if (isset($_POST["pid"])) {
$pid = $_POST["pid"];
$wasfound = false;
$i = 0;
if ( ! isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1) {
$_SESSION["cart_array"] = array(
0 => array(
"item_id" => $pid,
"quantity" => 1
)
);
} else {
foreach ($_SESSION["cart_array"] as $each_item) {
$i++;
while (list($key, $value) = each($each_item)) {
if ($key == "item_id" && $value == $pid) {
array_splice($_SESSION["cart_array"], $i-1, 1, array(
array(
"item_id" => $pid,
"quantity" => $each_item['quantity'] + 1
)
));
$wasfound = true;
}
}
}
if ($wasfound == false) {
array_push($_SESSION["cart_array"], array(
"item_id" => $pid,
"quantity" => 1
));
}
}
header("location: cart.php");
exit();
}
$ i跟踪for循环当前正在处理的数组的索引。 这类似于将foreach编写为:
for($i=0;$i<count($_SESSION['cart_array']);$i++){
...
}
代码使用$ i,因此它知道找到的元素位于$ _SESSION ['cart_array']内的哪个索引,因此可以将其拼接出来。 由于他们在for循环的开始增加了$ i(带有$ i ++),因此当找到一个元素($ i-1)时,他们需要减少它。 将$ i ++行放在for循环的底部将消除对减量的需要,然后可以在array_splice方法中将$ i-1替换为$ i。
您可以在http://php.net/manual/en/function.array-splice.php上阅读有关array_splice方法的更多信息。 注意,它需要一个索引(偏移量)。
好吧,如果您阅读了array_splice上的手册,将会看到offset参数不是数组元素的键( 或index )。
如果offset为正,则已删除部分的起始位置为距输入数组起始位置的偏移量。 如果offset为负,则它从输入数组的末尾开始。
而是元素在数组中的位置。 换句话说, $i
表示元素在此处数组中的位置,而不是该元素的键。
所以在下面的代码中...
$arr = ['foo' => 'bar', 'baz' => 'quix'];
array_splice($arr, 1, 1);
var_dump($arr);
会给你...
array(1) {
["foo"]=>
string(3) "bar"
}
其余逻辑很简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.