Оператор 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++;
}

?>

2

Решение

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

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

Другие решения

использование array_search

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

    <?php

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

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

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

echo $states[$index];

}

?>
2

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

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

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

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

т.е.

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

Выход :

Теннесси

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

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

0

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

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

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

……. ……. …….

И это продолжается вечно. Вы застряли в проверке на 0 индекса.

Вы должны выйти из цикла while, используя break, как только вы нашли совпадение, а не увеличивая счетчик. Также перед использованием continue Вы должны увеличить $count переменная. Также ваше условие цикла должно быть < скорее, чем <= так как 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 чтобы найти элемент в массиве, а не заново изобретать колесо.

0