Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从explode()数组中删除元素_Php - Fatal编程技术网

Php 从explode()数组中删除元素

Php 从explode()数组中删除元素,php,Php,今天我有一件有点难的事要告诉你。我正在尝试建立一个目录系统(通过mysqli和一个数据库) 我正在根据项目的id以字符串形式存储项目。(即“1,0,2,1,0”)。 为了阅读清单,我使用了“爆炸”功能 我需要找到一种方法从库存中“删除”一个项目 例如,假设库存设置为“1,2,3,4,5”,我想删除项目3 这将使库存设置为“1,2,4,5” 有没有办法做到这一点?我拥有的唯一与该项在字符串中的位置相关的信息是它在数组中的位置,由explode函数生成。而@MarkBaker在注释中给出了一个简单的

今天我有一件有点难的事要告诉你。我正在尝试建立一个目录系统(通过mysqli和一个数据库)

我正在根据项目的id以字符串形式存储项目。(即“1,0,2,1,0”)。 为了阅读清单,我使用了“爆炸”功能

我需要找到一种方法从库存中“删除”一个项目

例如,假设库存设置为“1,2,3,4,5”,我想删除项目3

这将使库存设置为“1,2,4,5”


有没有办法做到这一点?我拥有的唯一与该项在字符串中的位置相关的信息是它在数组中的位置,由explode函数生成。

而@MarkBaker在注释中给出了一个简单的解决方案(使用
array\u search
查找键,然后
取消设置
键),我将向您展示如何首先将数据转换为可用的内容

$items = explode(",",$inventory); // this is presumably what you have so far
$clean_inventory = array();
foreach($items as $item) {
    if( !isset($clean_inventory[$item])) $clean_inventory[$item] = 0;
    $clean_inventory[$item]++;
}

// now delete the item you want
unset($clean_inventory[$item_to_delete]);
// or, if you only want to remove one item,
// $clean_inventory[$item_to_delete]--;

// re-save in the "ugly" format...
$saved = array();
foreach($clean_inventory as $item=>$quantity) {
    $saved = array_merge($saved,array_fill(0,$quantity,$item));
}
$saved = implode(",",$saved);

从所需的代码量可以看出,这暗示您的数据结构不好,您应该感到不好:p最好首先在数据库中存储“item/quantity”对。

我存储的项目是基于其id的字符串。(即“1,0,2,1,0”)对其他方法有何建议?您必须执行array_search()以获取密钥,然后在再次内爆之前取消设置该密钥。。。。。这真是一个糟糕的方法。。。。正常化你的数据库要好得多。我会试一试,看看效果如何。这是处理手头问题的正确方法。虽然我使用的系统只是为了测试,但我现在可以肯定地看到将每个用户的项目和数量存储在单独的表中的优点。谢谢你的帮助,妮特!我会尽快将此标记为答案。