从explode()数组

时间:2015-08-10 16:57:19

标签: php

今天我有点困难。我正在尝试建立各种库存系统(通过mysqli和数据库)。

我在一个字符串中存储基于id的项目。 (I.E.“1,0,2,1,0”)。 为了阅读库存,我正在使用'爆炸'功能。

我需要找到一种从库存中“删除”商品的方法。

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

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

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

1 个答案:

答案 0 :(得分:1)

虽然@MarkBaker在评论中给出了简单的解决方案(使用array_search找到密钥,然后unset密钥),我将向您展示如何首先将数据转换为某些内容可用的。

$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将“项目/数量”对存储在数据库中会更好第一名。