【问题标题】:in_array problemin_array 问题
【发布时间】:2011-07-27 19:58:42
【问题描述】:

我有几个以数字为项目的大数组,每个数组都有 5 000 - 10 000 个值。

都是简单的数组,比如

$array = array(125,345345,345,3485,324,65,746647,3221, ... );

我正在尝试在它们中搜索某个数字,并针对不同的数字重复此操作近 1000 次。

喜欢

if $array has item 345 {
    return true
} else {
    return false
}

但是请求需要很长时间才能完成。有时服务器会出现超时错误。

按结构简单但按数组大小搜索某个数字的最佳方法是什么?

【问题讨论】:

标签: php arrays search


【解决方案1】:

最简单的方法是翻转数组(参见array_flip)并使用isset($array[$key])。它使用哈希查找而不是搜索,因此速度更快。

除此之外,请尝试使用数据库或一些更优化的方式来处理大型数据集。

【讨论】:

  • 看来我可以添加一个数字作为键,然后通过 isset 进行检查?
  • @Rooney,是的。我不确定您是如何构建阵列的。如果它是硬编码的,使用array_flip 很方便。 $a = array_flip(array(1,20,35,...))。否则,如果您在运行时构建它,您只需执行$a[$id] = true。该值无关紧要。
【解决方案2】:
if (in_array(345, $array)) {
    return true;
} else {
    return false;
}

没有看到您想对每个数字执行 1000 次。 使用数据库。

使用这样的数据库:

$result = mysql_query("SELECT * WHERE number={$number}", $link);
$x = (mysql_num_rows($result) > 0  ? mysql_num_rows($result) : false );

【讨论】:

  • 简体:return in_array(345, $array);
  • 1k 次 1k 不同的数字
【解决方案3】:

这更像是一个计算机科学问题,而不是 PHP 问题。我建议研究“二叉搜索”或“二叉树”。如果您四处搜索,您甚至可能会找到现有的实现。

【讨论】:

    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多