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