2016-11-03 107 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()

希望它有帮助。