Оператор continue внутри цикла while для функции страницы поиска

Я не понимаю, почему этот цикл не работает.

Цель этого цикла — просто пропустить каждое значение массива (в данном примере 0-2), которое не равно заданному поисковому запросу (в данном примере TN). Таким образом, выход должен быть

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++;
}

?>

person Logan Butler    schedule 03.11.2016    source источник


Ответы (5)


переместите count++, чтобы он всегда увеличивался, и будьте оптимистичны:

while($count < count($states)){
  if($states[$count] == $search){
    echo $states[$count]."<br/>";
  }
  $count++;
}
person WEBjuju    schedule 03.11.2016
comment
Но если я сделаю приращение до того, как эхо-отображение состояния не пропустит первое значение, установленное на 0? - person Logan Butler; 03.11.2016
comment
Могу я порекомендовать array_search? $pos = array_search($search, $states); echo $states[$pos].‹br/›; - person WEBjuju; 03.11.2016
comment
я думаю, что я должен быть while($count ‹ count($states)){ remove = иначе это даст вам ошибку, undefine offser - person Md Hasibur Rahaman; 03.11.2016

используйте array_search

Найдите в массиве значение "TN" и ​​верните его ключ

    <?php

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

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

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

         echo $states[$index];

        }

     ?>
person JYoThI    schedule 03.11.2016
comment
Можно ли его использовать как... if(!array_search($search, $states)){continue;} внутри моего цикла while? - person Logan Butler; 03.11.2016
comment
нет, с array_search вам не нужен цикл. вы просто переходите непосредственно к тому, что вам нужно, путем поиска. $pos = array_search($search, $states); echo $states[$pos].‹br/›; - person WEBjuju; 03.11.2016
comment
цикл while не нужен - person JYoThI; 03.11.2016

array_search - лучшее решение для вас

<?php
$states = array('IN', 'TN', 'OH');
$search = 'TN';
$searcharr = array_search($search, $states); 
var_dump($searcharr);
person Rajesh Patel    schedule 03.11.2016

Я думаю, что цикл foreach будет лучшим решением, чем цикл while. Ему не нужна точка cointinue или break, и ему не нужно считать, чтобы перебирать массив.

Цикл while в этом случае кажется бесполезным.

i.e. :

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

Выход :

TN

Но лучшим решением остается array_search().

Надеюсь, поможет.

person JazZ    schedule 03.11.2016

Вы застряли в бесконечном цикле.

1-я итерация, пока 0 ‹ 3, если $states[0] != 'TN' перейти к следующей итерации $count по-прежнему 0

2-я итерация, пока 0 ‹ 3, если $states[0] != 'TN' перейти к следующей итерации $count по-прежнему 0

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

И так будет продолжаться вечно. Ты застрял в проверке по 0 индексу.

Вы должны выйти из цикла while, используя break, как только вы нашли совпадение, а не увеличивать количество. Также перед использованием continue вы должны увеличить переменную $count. Также ваше условие цикла while должно быть <, а не <=, потому что count возвращает 3, а ваши индексы массива $states равны 0,1,2

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

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

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

И вы можете проверить array_search и in_array, чтобы найти элемент в массиве, а не изобретать велосипед.

person Mahfuzul Alam    schedule 03.11.2016