如何仅选择和遍历满足数组中特定条件的项


How to select and loop through only items that meet certain conditions in array

我想遍历一个应用了比较运算符的数组。

因此,而此代码:

$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;
}