簡體   English   中英

通過遍歷數組php查找字符串

[英]Finding a string by looping through an array php

我有這個數組$ 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,如果我包含break,則它將返回1,並且我希望得到4。

請有人指出正確的方向,或者即使有完全更好的方法來做到這一點,那么我也將不勝感激……

謝謝保羅,

即使在調用PHP循環時, break也會直接存在,即使有其他元素也是如此。 使用continue來進入下一個元素。

根據您的問題

我試圖遍歷並找到存在.eml文件的第一個數組位置

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

    return false;
}

從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。

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

如果沒有匹配項,您將得到假。

問題出在這里:

 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM