【问题标题】:How to delete array element by index如何按索引删除数组元素
【发布时间】:2016-05-20 22:45:31
【问题描述】:

有没有办法从数组中删除元素?它是存储项目 ID 的购物车。我想做删除功能。

例如 - cart_handler.php?delete=2687

array(5) { [1967]=> float(1) [1966]=> float(1) [2233]=> float(5) [2687]=> float(1) [2081]=> float(4) } 

【问题讨论】:

  • unset($array[key]) 不起作用?
  • 向您展示如何删除此元素的代码。
  • if ( isset($_GET['delete']) ) { $item_id = $_GET['delete'];未设置($CART[$item_id]); header('位置:/?page=cart'); }
  • unset($array[key]) 不起作用的原因是因为键不是产品 ID,而是值。数组中的键将是 0、1、2 等。因此您必须在取消设置之前搜索该值的键。希望我在回答中更好地解释了我的意思^^。

标签: php arrays unset


【解决方案1】:

是的,您可以,最简单的方法是在数组中搜索项目 ID,然后取消设置与其关联的键 - 然后作为扩展,您可以重新定位数组以修复数组键。 请注意:我没有对$arrayKey 及其返回的内容进行任何验证,您应该确保array_search 函数在取消设置之前按预期返回数组键只是为了安全。

所以是这样的:

$data = [1967, 1966, 2233, 2687, 2081];
$arrayKey = array_search(1966, $data);
unset($data[$arrayKey]);

指定的产品 ID 将被取消设置,只需将 1966 替换为您的 $_GET 变量。即

array_search($_GET['delete'], $data)

$data 数组将是您所有有效产品 ID 的列表,您可以从数据库或存储它们的任何位置提取它们。

如果您想在此之后重新建立关键索引,您可以这样做:

$data = array_values($data);

上面所做的是修复数组键索引,当您取消设置元素时,它将从数组中删除,但所有键将保持其当前索引。所以数组索引可能会像这样进行:0, 1, 3, 4。如果你用上面的方法重新定义数组,它们会自然地再次进步:0, 1, 2, 3

希望对您有所帮助,有任何问题请告诉我。

【讨论】: