2010-09-07 77 views
0

我希望能够轻松快速地从干草堆阵列中删除一列针头。实际上,我有一个以逗号分隔的数字列表(尽管这是一个我知道的字符串),需要从我从sql数据库中的字段中拉出的第二个以逗号分隔的数字列表中删除。从数组中删除数组的值的最佳方法是什么?

所以我需要 -

$ orig_needle_list = “3456,5678”; 干草堆列表位于mysql数据库中的一个字段中,并且是“3456,4567,5678,6789” - 所以我基本上想要将此字段更新为“4567,6789”

Q1。我应该检索haystack列表,将两者都转换为数组并使用嵌套的foreach循环和array_splice迭代它们的任何匹配值?

Q2我可以使用in_array比嵌套的foreach方法更快吗?

Q3有没有办法切出中间人,并通过在SQL查询中执行此操作来更新字段?

感谢

+4

为什么首先将数据存储为这样?这听起来像是沿线的某个地方,你或其他人打破了规范化的规则。 – 2010-09-07 15:16:09

回答

5

你并不需要遍历的东西,有一个函数调用和array_diff:

http://www.php.net/manual/en/function.array-diff.php

因此,创建2个逗号分隔列表数组并使用array_diff,得到的数组就是这两者的区别。

在数据库中存储逗号分隔的列表不是一个好主意,因为它打破了规范化。

+1

谢谢 - 你的意思是我不应该用逗号分隔值吗?在其他领域我使用了分号。这个可以吗? – undefined 2010-09-07 15:47:15

+2

问题不是你使用逗号或分号,问题是你在一个数据库字段(列)中存储多个值!最好使用外键创建一个额外的表来存储值。看看http://en.wikipedia.org/wiki/Database_normalization你会在这个新表中有很多新行,但这对你的SQL服务器来说并不是问题,事实上它可以加快速度,因为它可以为它编制索引。你也可以直接在DB中执行这个操作(array_diff)! – sled 2010-09-07 15:53:00

0

试试这个:

implode(",",array_diff(explode(",",$haystack),explode(",",$orig_needle_list))); 
相关问题