PHP和PHP中的动态大小的数组如果找不到则插入

时间:2014-04-05 07:46:18

标签: php arrays

我有一个店面网站,我想跟踪一个人在他们的用户表中购买了哪些产品。当一个人买东西时,附加到一列将是他们购买的东西的产品ID。我想使用explode()更改此数据,但我不确定如何在数组初始化后增加数组的大小。

//this is when a user purchases a new product
$newItems = #whatever they're purchasing
//grab previous data from SQL ("1,2,3")
$purchProd = explode(',',$dataFromSQL);
//$purchProd now an array of size 3
for ($i = 0; $i < count($newItems); $i++) {
    $purchProd[$i] = $newItems[$i];
}

这里有两个问题:

  1. 我无法&#34;调整大小&#34;像这样的数组,它会抛出一个越界异常
  2. 我不希望$purchProd有重复项;如果用户购买了另一个商品1,这是不合适的
  3. 我可以使用in_array过滤掉重复内容并只添加新条目,但后来我遇到了一个我将会有空白的实例。

    //$purchProd = {1,2,3};
    //$newItems = {4,1,5};
    for ($i = 0; $i < count($newItems); $i++) {
        if (!in_array($newItems[$i],$purchProd) {
            $purchProd[$i] = $newItems[$i];
        }
    }
    //$purchProd = {1,2,3,4,null,5};
    

    但是,只有当我能够动态调整阵列大小时,我才能这样做。

    我很难过。有没有办法获得我想要的结果?基本上我想将array2中的所有元素添加到array1 中而不是array1 中。

    澄清

    基本上我有两个数组:

    $arrayOne = {1,2,3};
    $arrayTwo = {4,1,5};
    

    我想让$arrayThree包含$arrayOne中的所有元素和$arrayTwo中的所有元素,但不包含重复项。潜在$arrayThree可能是:{1,2,3,4,5},请注意第二个1未添加。

1 个答案:

答案 0 :(得分:1)

如果您有两个字符串,请回答您的问题:

array_unique(array_merge(explode(',', $string1), explode(',', $string2)))

这会将它们连接在一起并丢弃任何重复的值。

但是,根据评论,将数据以序列化形式存储在关系数据库中通常是错误的答案 1 ,因为它将您的数据锁定为没有类型的表单,不能有应用了数据库约束,并且无法使用传统SQL进行搜索。

相反,我会在product_review表上添加一个约束以防止重复,然后执行SELECT检查以阻止用户查看审核UI或添加审核。


1 这种技术可以很好地挤出额外的读取性能,并且只应在其他方法耗尽时使用(例如使用索引和重写查询)。大多数人不应该这样做。