1

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

所以,虽然这段代码:

$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 循环效率更高。

4

2 回答 2

3

您可以在回声周围添加一个条件。

$arr = array(1,2,3,4,5,6,7,8,9); 

foreach($arr as $key) {
    if ($key > 5) {
        echo $key;
    }
}

或者使用三元运算符,如果它不大于五,则回显一个空字符串。

$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;
}
于 2013-10-12T03:55:23.963 回答
1
$arr = array(1,2,3,4,5,6,7,8,9); 

foreach($arr as $key) 
{ 
  if($key > 5)
     echo $key;
}
于 2013-10-12T03:54:41.703 回答