在foreach命令(php)上只显示一个结果

时间:2013-09-19 11:52:47

标签: php file foreach directory

我有以下代码。

    if ($_GET['dir']!=''){
        $checkifhasfiles = array_diff(scandir($_GET['dir']), array(".","..","error_log"));
        foreach($checkifhasfiles as $cihf){
            if(is_file($_GET['dir'].'/'.$cihf)){
                echo "Ok, the folder has files";
            }
        }
    }

如果文件夹包含one个文件,我只想显示only消息。问题是,正如预期的那样,foreach正在为文件夹包含的每个文件“回显”一条消息。

我怎样才能“绕过”那个,如果文件夹中有文件,只打印一条消息?

谢谢和最好的问候

顺便说一句 - 对于缩进感到抱歉,我正在写在记事本上,因为我不在家,而且它不是完全缩进的

3 个答案:

答案 0 :(得分:2)

如果我理解正确,你不只是想在第一个找到的文件上回显,但如果文件夹包含ONLY文件(即没有子文件夹)。如果这是真的,这将有效:

if (isset($_GET['dir']) && !empty($_GET['dir']))
{
    $checkifhasfiles = array_diff(scandir($_GET['dir']), array(".","..","error_log"));
    $i = 0;

    foreach($checkifhasfiles as $cihf)
    {
        if(is_file($_GET['dir'].'/'.$cihf))
        {
            $i++;
        }
    }

    if ( count($checkifhasfiles) === $i )
    {
        echo "Ok, the folder has files";
    }
}

答案 1 :(得分:1)

你可以试试“休息”吗? http://php.net/manual/en/control-structures.break.php

if ($_GET['dir']!=''){
     $checkifhasfiles = array_diff(scandir($_GET['dir']), array(".","..","error_log"));
     foreach($checkifhasfiles as $cihf){
         if(is_file($_GET['dir'].'/'.$cihf)){
            echo "Ok, the folder has files";break;
         } 
      }  
   }

答案 2 :(得分:1)

更容易检查文件夹是否有孩子:

if(count(glob($_GET['dir']."/*")) { 
  echo "NOT EMPTY"; 
}