通过循环数组php找到一个字符串

时间:2015-05-17 15:27:52

标签: php arrays if-statement foreach strpos

我有这个数组$ filelist

Array ( [0] => . [1] => .. [2] => .DS_Store [3] => 11-96.eml [4] => 11-97.eml ) 

哪个是特定目录中所有文件的列表...有时候没有.DS_Store文件,有时会有,有时会有2个eml文件,有时会有6个。我试过循环并找到第一个数组位置.eml文件存在,以便我可以计算出有多少文件是eml以及从哪里开始引用数组..我试过...

 function firstFileInList($filelist) {
        $x = 0;
        foreach ($filelist as $value) {
          if(strpos($filelist, ".eml") == false) {
              $x = $x + 1;   
             //break;
            }

          }

          return $x;
      }

这返回5,如果我包含中断它返回1并且我期望得到4。

请有人指出我正确的方向,或者即使有更好的方法来做到这一点,那么我会非常感激地看到......

谢谢保罗,

4 个答案:

答案 0 :(得分:3)

  即使有其他元素,

break在调用时也会直接存在每个PHP循环。使用continue转到下一个元素。

根据您的问题

  

我正在尝试循环并找到第一个数组位置.eml文件存在

function firstFileInList($filelist) {
    foreach($filelist as $k => $v)
      if(strpos($v, ".eml") !== false)
        return $k;

    return false;
}

答案 1 :(得分:2)

从foreach中的数组中获取键的最佳方法是在键启动之前定义键。尝试使用以下代码更新代码:

function firstFileInList($filelist) {
    $x = false;
    foreach ($filelist as $key => $value) {
        if(strpos($value, ".eml") == false) {
            $x = $key;   
            break;
        }
    }
    return $x;
}

这样做是将$ x设置为实际键而不是像在for()循环中那样增加的数字。 $ key将始终是数组键,因此在此示例中为0,1,2,3,4。

答案 2 :(得分:1)

 function firstFileInList($filelist) {
 $key=false;
    foreach ($filelist as $key=>$value) {
      if(strpos($value, ".eml") !==false){ 
         break;
        }
      }
      return $key; 
  }

如果没有匹配,则会出现错误。

答案 3 :(得分:1)

问题在于:

 foreach ($filelist as $value) {
     if(strpos($filelist, ".eml") == false) {

请注意,对于您编写的foreach循环,它会获取$filelist数组的每个元素,并将其放入$value变量中。也许你没有在PHP中打开警告,但是当我尝试你的代码时,我得到了以下内容:

Warning: strpos() expects parameter 1 to be string, array given in test/a.php on line 6

你想要的是

foreach ($filelist as $value) {
    if(strpos($value, ".eml") == false) {
        $x = $x + 1;
    }           
}

注意第二行中的$value