2016-11-03 218 views
2

我不明白爲什麼這個循環不起作用。while while循環中繼續聲明搜索頁功能

此循環的目的僅僅是跳過不等於給定搜索詞(在本例中爲TN)的數組的每個值(在本例中爲0-2)。所以輸出應該是

TN 

,不應該

IN 
TN 
OH 

這裏是我的代碼:

<?php 

$states = array('IN', 'TN', 'OH'); 
$search = 'TN'; 

$count = 0; 
while($count <= count($states)){ 
    if($states[$count] != $search){ 
     continue; 
    } 

    echo $states[$count]."<br/>"; 
    $count++; 
} 

?> 

回答

4

移動計數++所以它總是增量和樂觀:

while($count < count($states)){ 
    if($states[$count] == $search){ 
    echo $states[$count]."<br/>"; 
    } 
    $count++; 
} 
+0

但是,如果我讓增量發生在狀態的echo'ing不會跳過第一個設置爲0的值? –

+0

我可以推薦array_search? $ pos = array_search($ search,$ states); echo $ states [$ pos]。「
」; – WEBjuju

+0

我想我應該是while($ count

2

使用array_search

搜索的值「TN」的數組,並返回其關鍵

<?php 

     $states = array('IN', 'TN', 'OH'); 
     $search = 'TN'; 

     $index = array_search($search, $states); 

     if($index && $states[$index]) 
     { 

     echo $states[$index]; 

     } 

    ?> 
+0

它可以用來像... if(!array_search($ search ,$ states)){continue;}在我的while循環中? –

+0

不,用array_search你不需要循環。你只需通過搜索直接找到你需要的東西。 $ pos = array_search($ search,$ states); echo $ states [$ pos]。「
」; – WEBjuju

+0

有沒有必要while循環 – JYoThI

0

array_search是你

<?php 
$states = array('IN', 'TN', 'OH'); 
$search = 'TN'; 
$searcharr = array_search($search, $states); 
var_dump($searcharr); 
0

你在無限循環卡住自己的最佳解決方案。

第一次迭代,而0 < 3,如果$狀態[0]!= 'TN' 繼續下一 迭代$數仍爲0

第二iterantion而0 < 3,如果$狀態[0] != 'TN' 繼續下一個迭代 $數仍爲0

....... ....... .......

而且它永遠繼續堅持你自己在檢查0指數。

您應該退出while循環,一旦找到匹配而不是遞增計數,就使用break。在使用continue之前,您應該增加$count變量。此外,您的while循環的條件應該是<而不是<=因爲count回報3,和你的$states數組索引是0,1,2

​​

而且你可以檢查array_search & in_array尋找在數組中的元素,而不是重新發明輪。

0

我認爲foreach循環比while循環更好。它不需要cointinuebreak點,也不需要計數來遍歷數組。

在這種情況下,while循環看起來毫無用處。

即:

foreach ($states as $state) { 
    if ($state == $search) { 
     echo $state."<br />"; 
    } 
} 

輸出:

TN

但是,最好的解決方案停留在array_search()

希望它有幫助。