【问题标题】:PHP - Check variable or compare string?PHP - 检查变量或比较字符串?
【发布时间】:2010-08-30 23:56:29
【问题描述】:

当我们想查看“单词”是否是数组的元素时,我想知道哪些摘录应该占用更少的资源:

摘录 1 - 检查变量:

<?php
function checkWord($word, $elements) {
    $array = array($word => true);
    foreach ($elements as $element) {
        if (isset($array[$element])) return true;
    }
    return false;
}

$elements = array('this', 'is', 'an', 'array', 'with', 'a', 'word');
checkWord('word', $elements);
?>

摘录 2 - 比较字符串:

<?php
function checkWord($word, $elements) {
    foreach ($elements as $element) {
        if ($element == $word) return true;
    }
    return false;
}

$elements = array('this', 'is', 'an', 'array', 'with', 'a', 'word');
checkWord('word', $elements);
?>

我知道我们可以简单地使用in_array(),但这不是重点。 那么,总而言之,使用 isset 进行变量检查是否比比较字符串更好?

编辑请理解我知道有更好的方法来做到这一点。我只是询问以上哪种方式更好并且占用的资源更少。

【问题讨论】:

  • 如果它们返回true或false,它们不应该被包装在函数中吗?
  • 是的,这只是我编写的快速代码。这不是这里的问题,但没关系,我会编辑:)
  • 创建适当的数组并使用 in_array 怎么样?毫无疑问,它会比您建议的更快。
  • in_array 应该非常适合这种情况。有什么问题吗??
  • @Mark,虽然第一次阅读问题的速度是我的错,但我实际上毫不费力地理解了 Nuno 想知道的是对数组进行迭代的两种方法中哪一种更快因此,除了内置的 in_array() 之外,资源消耗更少。我真的看不出任何反对票的原因,这是一个完全有效的问题。

标签: php string variables compare


【解决方案1】:

我使用 51000 多个唯一单词列表进行了基准测试,以满足您(老实说,也是我的)的好奇心。虽然不是很多,但使用 isset() 确实比比较字符串快,第一种方法平均 0.0144901275634765625 秒,而第二种方法平均 0.0164241790771484375 秒,超出5 次尝试。

希望这会有所帮助。

【讨论】:

  • 我上面说过我们可以使用那个函数。这不是这里的问题。
  • 我发帖后才意识到,我很抱歉!请查看更新后的答案。
  • 是的,谢谢你回答这个问题,并理解它的目的(我假设你是唯一的,老实说......)。无论如何,这些测试是否有助于我决定什么是最适合 CPU 的?再次感谢您!
  • 很高兴能帮上忙!实际上,这个测试只表明方法之间的差异可以忽略不计,在上述数据集上最快的方法仍然是in_array()@0.003899097442626953125 秒。我不会使用替代方法,而是以可以在其上使用内置方法的方式处理数据集,但如果出于某种奇怪的原因这是不可能的,我显然会选择最快的剩余方法这个案例是第一个。最后,它主要取决于您给定的数据集。
  • 好的,谢谢 :) 是的,我通常依赖内置函数。此外,当我可以简单地避免它时,我并没有真正使用 foreach(因为它复制了数组),所以它也可能会减慢这里的测试 :) 无论如何,正如我所期望的,isset() 比字符串比较好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 2011-10-03
  • 1970-01-01
  • 2011-12-07
  • 2021-10-14
  • 1970-01-01
相关资源
最近更新 更多