Продолжить вывод внутри цикла while для функции поиска

70
8

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

Цель этого цикла - просто просто пропустить каждое значение массива (в этом примере 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++;
}

?>

спросил(а) 2016-11-03T08:04:00+03:00 3 года, 10 месяцев назад
1
Решение
90

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

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

ответил(а) 2016-11-03T08:18:00+03:00 3 года, 10 месяцев назад
90

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

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

ответил(а) 2016-11-03T08:07:00+03:00 3 года, 10 месяцев назад
70

использовать array_search

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

    <?php

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

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

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

echo $states[$index];

}

?>

ответил(а) 2016-11-03T08:14:00+03:00 3 года, 10 месяцев назад
40

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

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

т.е.:

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

Вывод:

Теннесси

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

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

ответил(а) 2016-11-03T08:29:00+03:00 3 года, 10 месяцев назад
41

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

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 для нахождения элемента в массиве, а не заново изобретать колесо.

ответил(а) 2016-11-03T08:23:00+03:00 3 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема