2017-04-13 57 views
0

我有一個函數返回mp3列表的質量。我想要返回HD值如果我到達數組中的最後一個元素,但我在foreach循環中遇到問題,則返回true。它總是返回true。如何在foreach循環中獲得最高數字

代碼

function funcName() { 
    foreach($dirs as $d) { 
     if (filesize($d) > 200) { 
      $qualities = substr(strrchr(basename($d), "-"), 1); 
      $qualities = preg_replace('/\\.[^.\\s]{3,4}$/', '', $qualities); 
      // This is where I check whether it is the last element or not. 
      $numItems = count($dirs); 
      $i = 0; 
      foreach($dirs as $key => $value) { 
       if (++$i === $numItems) { 
        $zaa = true; 
       } else { 
        $zaa = false; 
       } 
      } 
      $files[] = ["files" => basename($d), "qualities" => $qualities, "hd" => $zaa]; 
     } 
    } 
    return ($files); 
} 

我只是想回到$zaa = true如果我達到了最後一個元素。在我的代碼中,它始終返回true

請問你能告訴我我失敗的部分嗎?

+0

將您的計數($ dirs)放在您的foreach循環之上,每迭代一次,您將重新計算數組/集合的大小。這是表現不是解決方案。 –

回答

1

我想這應該工作:

function funcName() { 

$numItems = count($dirs); 
$i = 0; 
foreach($dirs as $d) { 
$i++; 
    if (filesize($d) > 200) { 
     $qualities = substr(strrchr(basename($d), "-"), 1); 
     $qualities = preg_replace('/\\.[^.\\s]{3,4}$/', '', $qualities);   
     if ($i == $numItems) { 
      $zaa = true; 
     } else { 
      $zaa = false; 
     }    
     $files[] = ["files" => basename($d), "qualities" => $qualities, "hd" => $zaa]; 
    } 
} 
return ($files); 
} 
+0

告訴我它是否按預期工作 – NoOorZ24

+0

是的,這工作非常感謝你,我想出了另一種解決方案,但我會將你的問題標記爲正確的謝謝!:) –

1

您不必循環$dirs再次,只是做這樣的:

function funcName() { 
    $i = 1; 
    $numItems = count($dirs); 
    foreach($dirs as $d) { 
     $i++; 
     $zaa = $i === $numItems; 
     if (filesize($d) > 200) { 
      $qualities = substr(strrchr(basename($d), "-"), 1); 
      $qualities = preg_replace('/\\.[^.\\s]{3,4}$/', '', $qualities); 
      // This is where I check whether it is the last element or not. 
      $numItems = count($dirs); 

      $files[] = ["files" => basename($d), "qualities" => $qualities, "hd" => $zaa]; 
     } 
    } 
    return ($files); 
} 
+0

這並沒有工作,仍然返回所有結果:( –

+0

@LunaticFnatic我編輯了我的答案。你不需要循環兩次'$ dirs',實際上它不會工作。 – Alisson

+0

謝謝,我也贊成你的答案,它的工作原理,但我想出了另一種解決方案:) –

0

您可以通過以下條件改變你的病情。如果您的密鑰從0開始,那麼您需要(sizeof($ dirs) - 1)來獲取總數組元素。

if(sizeof($dirs) == $key) 
+0

這仍然返回true所有的結果 –

0

使用for循環相反,如果你正在使用COUNT()和所有那些陳述它只是增加無用行代碼,用於(){}會更短,更簡單

+0

順便說一句TRUE來自第一回路內部的secound循環,這是沒有意義的,只是把這些線外,或者你是每次都在該循環中的最後一個項目,並收到真實 – NoOorZ24

+0

有沒有更容易的解決方案檢查最後一個元素沒有第二個foreach或count()?如果可能的話,你可以給我一個forloop版本的例子嗎?提前致謝! –

+0

我發佈了新的答案,仍然使用foreach,只是因爲我太懶惰了,我沒有說你需要擺脫count(),你只是用它錯了 – NoOorZ24

0

這兩個答案是正確的,但我想出了這個解決方案似乎更快;

if ($d === end($dirs)) { 
    $zaa = true; 
} else { 
    $zaa = false; 
} 
相關問題