Я не понимаю, почему этот цикл не работает.
Цель этого цикла — просто пропустить каждое значение массива (в данном примере 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++;
}
?>
переместите счетчик ++, чтобы он всегда увеличивался и был оптимистичным:
while($count < count($states)){
if($states[$count] == $search){
echo $states[$count]."<br/>";
}
$count++;
}
использование array_search
Найдите в массиве значение «TN» и верните его ключ
<?php
$states = array('IN', 'TN', 'OH');
$search = 'TN';
$index = array_search($search, $states);
if($index && $states[$index])
{
echo $states[$index];
}
?>
array_search — лучшее решение для вас
<?php
$states = array('IN', 'TN', 'OH');
$search = 'TN';
$searcharr = array_search($search, $states);
var_dump($searcharr);
Я думаю, что цикл foreach будет лучшим решением, чем цикл while. Это не нужно cointinue
или break
указать и не нужно считать, чтобы перебрать массив.
Цикл while в этом случае кажется бесполезным.
т.е.
foreach ($states as $state) {
if ($state == $search) {
echo $state."<br />";
}
}
Выход :
Теннесси
Но лучшее решение остается array_search()
,
Надеюсь, поможет.
Вы застряли в бесконечной петле.
1-я итерация пока 0 < 3, если $ states [0]! = ‘TN’ перейти к следующему
повторение $ count еще 02-я итерация пока 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 чтобы найти элемент в массиве, а не заново изобретать колесо.