【问题标题】:What is the best way to delete an array of values from an array?从数组中删除一组值的最佳方法是什么?
【发布时间】:2010-09-07 15:14:23
【问题描述】:

我希望能够轻松快速地从 haystack 数组中删除针数组。实际上,我有一个逗号分隔的数字列表(尽管这是我知道的一个字符串),需要从我从我的 sql 数据库中的字段中提取的第二个逗号分隔的数字列表中删除。

所以我需要 -

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

第一季度。我是否应该检索 haystack 列表,将两者都转换为数组并使用嵌套的 foreach 循环和 array_splice 任何匹配值对其进行迭代?

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

Q3 有没有办法通过在 sql 查询中执行此操作来删除中间人并更新字段?

谢谢

【问题讨论】:

  • 一开始为什么要这样存储数据?听起来好像在某个地方,您或其他人违反了规范化规则。

标签: php mysql arrays


【解决方案1】:

你不需要对事物进行迭代,有一个名为 array_diff 的函数:

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

所以创建 2 个逗号分隔列表的数组并使用 array_diff,得到的数组就是这两个的差。

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

【讨论】:

  • 谢谢 - 你的意思是我不应该使用逗号来分隔值吗?在其他领域,我使用了分号。这样可以吗?
  • 问题不在于您使用逗号或分号,问题在于您将多个值存储在一个数据库字段(列)中!最好为它的父表创建一个带有外键的额外表来存储值。看看en.wikipedia.org/wiki/Database_normalization 你会在这个新表中有很多新行,但这对你的 SQL 服务器来说不是问题,确实它加快了速度,因为它可以索引它。您也可以直接在数据库中执行此操作(array_diff)!
【解决方案2】:

我想你正在寻找 array_intersect() http://php.net/manual/en/function.array-intersect.php

【讨论】:

    【解决方案3】:

    试试这个:

    implode(",",array_diff(explode(",",$haystack),explode(",",$orig_needle_list)));
    

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 1970-01-01
      • 2011-04-09
      • 2010-12-17
      • 1970-01-01
      • 2019-09-01
      • 2017-05-12
      • 1970-01-01
      • 2022-08-12
      相关资源
      最近更新 更多