【发布时间】:2019-05-08 07:16:49
【问题描述】:
我在php中有一个带有数字的数组,例如
$data=array(1500,1515,1300,1466,15,151)
我想在该数组中找到包含 15 的数字,在本例中为
$result=array(1500,1515,15,151).
我知道我可以将它们转换为字符串并使用 strpos 进行搜索,但我想要一种使用整数除法/乘法的更快方法。
有什么建议吗?
接受答案后更新。
使用此代码,我已经测试了方法、字符串和整数,在 1 到 6 位的数字中进行了 10000 次搜索。更快的方法是字符串方法。
<?php
$data = array();
for($i=0;$i<10000;$i++)
$data[]=rand(0,100000);
$start1 = microtime(true);
for($i=0;$i<100;$i++)
foreach($data as $j=>$v)
{
$needle = false;
while($v && !$needle) {
if($v%100 == 15) // Check if last two digits are 15.
$needle = true;
$v = floor($v/10); // Remove last digit.
}
}
$end1 = microtime(true);
$start2 = microtime(true);
for($i=0;$i<100;$i++)
foreach($data as $j=>$v)
$needle=strpos($v, '15') !== false;
$end2 = microtime(true);
echo "int: ".($end1-$start1)."<br>string: ".($end2-$start2);
?>
输出是:
int: 1.2258439064026
string: 0.4002320766449
【问题讨论】:
-
到目前为止你有没有尝试过?您有什么理由认为使用数字会更快?
-
我有疑问,这就是我问的原因,我的数组中有很多数字,我正在尝试优化速度
-
考虑到您必须反复除以 10 并取模 100 才能找到
15,我认为 strpos 几乎肯定会更快。 -
这似乎是一项奇怪的任务。它到底有什么用?还是只是一个编码挑战?
-
因此字符串的速度提高了 3 倍以上。很高兴你的直觉得到证实。查看结果很有趣(并且有用),感谢您发布它们。