我想遍历一个应用了比较运算符的数组。
因此,而此代码:
$arr = array(1,2,3,4,5,6,7,8,9);
foreach($arr as $key)
{
echo $key;
}
将echo
"123456789",我想要一个只能列出大于 5 或小于 5 的数字等的代码(因此它将输出 6789 或 1234。
注意:我几乎可以肯定有一种方法可以做到这一点,而且它相对简单,但我找不到一种方法来做到这一点,而且在stackoverflow上似乎没有问题。我已经看过了,但正如我的标题所示,我不确定如何简洁地说明这一点以供谷歌搜索。谢谢。
注意:我曾考虑过使用外部条件检查,但我猜如果有专门用于此的 php 函数,它会更有效率。
更新:有人建议array_filter,所以我运行了以下基准测试,以测试传统方法或内置方法在这里是否更好:
$arr=array();
for($x=1;$x<10001;$x++){
$arr[]=$x;
}
$a1 = microtime();
foreach($arr as $key) {
if ($key > 5000) {
echo $key;
}
}
$a2 = microtime();
$a3 = microtime();
$greater = array_filter($arr, function ($key) {
return $key > 5000;
});
foreach($greater as $key) {
echo $key;
}
$a4 = microtime();
$firsttest=$a2-$a1;
$secondtest=$a4-$a3;
echo '<br>'.$firsttest.'<br>'.$secondtest;
第二个测试持续花费了大约两到三倍的时间,这意味着使用 foreach 然后使用 if 条件比使用 array_filter 然后使用 foreach 循环要有效得多。
您可以在回声周围添加一个条件。
$arr = array(1,2,3,4,5,6,7,8,9);
foreach($arr as $key) {
if ($key > 5) {
echo $key;
}
}
或者使用三元运算符,如果空字符串不大于 5,则回显空字符串。
$arr = array(1,2,3,4,5,6,7,8,9);
foreach($arr as $key) {
echo $key > 5 ? $key : '';
}
然后是array_filter
,它允许您提取所有values > 5
并将它们放在自己的数组中。如果您需要保留这些值以供以后使用,这将非常有用。
$arr = array(1,2,3,4,5,6,7,8,9);
$greater = array_filter($arr, function($key) {
return $key > 5;
});
foreach($greater as $key) {
echo $key;
}
$arr = array(1,2,3,4,5,6,7,8,9);
foreach($arr as $key)
{
if($key > 5)
echo $key;
}