【问题标题】:PHP if nothing displays in if statementPHP if 语句中没有显示
【发布时间】:2017-05-24 23:29:24
【问题描述】:

这是我的数组:

Array
(
    [0] => Array
        (
            [id] => 5
        )

    [1] => Array
        (
            [id] => 9
        )

    [2] => Array
        (
            [id] => 2
        )

这是我的 PHP 代码:

<?php
foreach($results as $row) {
    if($row['id'] > 10) {
        echo $row['id'];
    }
}
?>

由于没有大于 10 的 id,我希望它:

echo 'Nothing found';

我该怎么做?谢谢。

【问题讨论】:

  • else { echo 'Nothing found'; } - 够简单.
  • ...似乎是一个技巧问题。
  • @Fred-ii-else 到 if 语句将是小于 10 的任何值。如果 if 语句中没有大于10.
  • 你的if($row['id'] &gt; 10)和你的“因为没有大于10的id,所以我想要它”——我的else应该在这里工作;我知道这是一个棘手的问题。
  • @Jeff 是的,想想看,你让我“跳出框框思考”......对我来说会失败。然而,在我之后认为的查询中会产生奇迹。我会突然回答,但他们可能会问我它是如何工作的;我认为我不这样做是明智的;-)

标签: php arrays if-statement foreach


【解决方案1】:

只需设置一个布尔标志:

$foundone=false;

foreach($results as $row) {
   if($row['id'] > 10) { 
       $foundone = true;
       echo $row['id'];
   }
}

if(!$foundone) {
  echo "Nothing found";
}

替代方案:对数组进行排序(通过 usort f.e.)并检查最大值:

usort($array, function ($a, $b) { return $a['id']>$b['id']; });
if ($array[count($array)-1]['id'])>10) {
   echo "found an id higher than 10!";
} else {
   echo "nothing found";
}

但我怀疑这会更快和/或更容易阅读和维护。

【讨论】:

  • 我还建议在$foundone = true; 之后添加break 以停止处理,除非需要处理所有的时间。显然,将echo 移到ifstatement 之外
  • 好吧,他可能想要打印所有大于 10 的匹配项。至少我是这样理解请求的。
【解决方案2】:

如果你想说什么都没找到,你可以这样做:

$output = '';
foreach($results as $row) {
    if($row['id'] > 10) $output .= $row['id'];
}
echo ($output == '') ? 'Nothing found' : $output;

【讨论】:

    【解决方案3】:

    我建议跟踪最大 ID。

    $maxId = 0;
    foreach($results as $row){
        // safely store the id
        $id = isset($row['id']) && is_numeric($row['id']) ? $row['id'] : 0;
        // check if $id is bigger than $maxId and set
        $maxId = $id > $maxId ? $id : $maxId;
        // print the id
        echo $id;
    }
    
    if($maxId > 10){
        ...
    }
    

    【讨论】:

      【解决方案4】:

      另一种方法是使用array_filter。抱歉回复晚了

      $arr=array
      (
           array
              (
                  'id' => 5
              ),
      
           array
              (
                  'id' => 9
              ),
      
          array
              (
                  'id' => 2
              )
          );
      
      
      $new_arr = array_filter($arr, function ($elem) {
                        return $elem['id'] > 10
                 });
      if(count($new_arr)==0){
           echo 'Nothing found';
      }
      

      【讨论】:

      • if ($elem['id'] &gt; 10 { return true; } => return $elem['id'] &gt; 10;
      • 不知道的人,array_filter()还是个looper/iterator。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多