0

我创建了以下格式的多维数组

Array ( [0] => Array ( [id] => 10 [quantity] => 3 ) [1] => Array ( [id] => 9 [quantity] => 2 ) [2] => Array ( [id] => 12 [quantity] => 4 ) )

当我尝试根据 id 取消设置特定的数组元素时,取消设置后我得到如下所示的数组。

Array ( [0] => Array ( [id] => 10 [quantity] => 3 ) [2] => Array ( [id] => 12 [quantity] => 4 ) )

数组元素未设置,但下一个数组元素不会移动到已删除的数组位置。

对于未设置的数组元素,我使用以下代码。

$i = 0;
foreach($cartdetails["products"] as $key => $item){
    if ($item['id'] == $id) {
        $match = true;
        break;
    }
    $i++;
}
if($match == 'true'){
    unset($cartdetails['products'][$i]);
}

如何解决这个问题?请帮我解决它。

提前致谢。

4

4 回答 4

1

好吧,如果你想保持顺序,但只是想重新索引键,你可以使用array_values()函数。

$i = 0;
foreach($cartdetails["products"] as $key => $item){
    if ($item['id'] == $id) {
        $match = true;
        break;
    }
    $i++;
}
if($match == 'true'){
    unset($cartdetails['products'][$i]);
}
array_values($cartdetails['products']);
于 2013-06-19T08:50:15.563 回答
0

为什么不用这个???

$id = 9;
foreach($cartdetails["products"] as $key => $item){
   if ($item['id'] == $id) {
       unset($cartdetails['products'][$key]);
       break;
   }    
 }
于 2013-06-19T09:03:55.327 回答
0

使用 unset 不会改变数组的索引。您可能想使用 array_splice。

http://www.php.net/manual/en/function.array-splice.php

http://php.net/manual/en/function.unset.php

于 2013-06-19T08:49:58.040 回答
0

为什么要使用 $i++ 来查找要取消设置的元素?

您可以在 foreach 循环中取消设置元素:

foreach($cartdetails['products'] as $key => $item){
    if ($item['id'] == $id) {
        unset($cartdetails['products'][$key]);
        break;
    }
}
// in your case array_values will "reindex" your array
array_values($cartdetails['products']);
于 2013-06-19T09:04:59.600 回答