【问题标题】:Finding a string by looping through an array php通过遍历数组php查找字符串
【发布时间】:2015-07-29 02:13:12
【问题描述】:

我有这个数组 $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。

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

谢谢保罗,

【问题讨论】:

  • 你的问题是什么?
  • 我的问题是在数组中找到特定字符串位置的最佳方法是什么,抱歉...
  • 也可以考虑foreach (glob("/some/path/*.eml") as $filename){ ... }

标签: php arrays if-statement foreach strpos


【解决方案1】:

break 在每个 PHP 循环被调用时直接存在,即使还有其他元素。使用continue 获取下一个元素。

根据您的问题

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

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

    return false;
}

【讨论】:

  • 我建议在最后返回 false,以防不匹配
  • @PaulLeppard:完美 :-) 您可以稍后将答案标记为解决方案 :-)
【解决方案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。

【讨论】:

  • 小心这个。如果没有匹配,它将返回 0,表明在第一个值中找到了匹配。也许最初将 $x 定义为 false。
【解决方案3】:
 function firstFileInList($filelist) {
 $key=false;
    foreach ($filelist as $key=>$value) {
      if(strpos($value, ".eml") !==false){ 
         break;
        }
      }
      return $key; 
  }

如果没有匹配,则为假。

【讨论】:

    【解决方案4】:

    问题出在这里:

     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

    【讨论】:

      猜你喜欢
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 2014-06-16
      • 2023-03-23
      相关资源
      最近更新 更多