我有一个店面网站,我想跟踪一个人在他们的用户表中购买了哪些产品。当一个人买东西时,附加到一列将是他们购买的东西的产品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];
}
这里有两个问题:
$purchProd
有重复项;如果用户购买了另一个商品1
,这是不合适的我可以使用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
未添加。
答案 0 :(得分:1)
如果您有两个字符串,请回答您的问题:
array_unique(array_merge(explode(',', $string1), explode(',', $string2)))
这会将它们连接在一起并丢弃任何重复的值。
但是,根据评论,将数据以序列化形式存储在关系数据库中通常是错误的答案 1 ,因为它将您的数据锁定为没有类型的表单,不能有应用了数据库约束,并且无法使用传统SQL进行搜索。
相反,我会在product_review
表上添加一个约束以防止重复,然后执行SELECT
检查以阻止用户查看审核UI或添加审核。
1 这种技术可以很好地挤出额外的读取性能,并且只应在其他方法耗尽时使用(例如使用索引和重写查询)。大多数人不应该这样做。