2014-10-14 5 views
0

Я пытаюсь изучить php, и я играю с петлями. Мне было интересно, как распечатать определенное число в массиве в php. Fx:echo a number in php

$a = [1,3,5,7,9,11,13]; 
$s = 3; 

while($a == 3) { 
    echo $s.' is in the row'; 
    $a++; 
} 

В этом примере я хотел бы пробежать $ a и посмотреть, существуют ли там 3. Если он делает это, нужно эхо «3 находится в строке», я пытался сделать цикл while, но это неверно. Может ли кто-нибудь увидеть, что я делаю неправильно? Просто сказать это, я думаю, что это очень неправильно, но я не знаю, как его решить, если мне нужно использовать цикл while?

С наилучшими пожеланиями Мадс

+0

Вы нашли ответ? – rnevius

ответ

0

Изменить немного код меняется в то время как условия:

$a = array(1,3,5,7,9,11,13); 
$s = 3; 
$counter = 0; 
while($counter < count($a)) { 
    if ($a[$counter] == $s) 
     echo $s.' is in the row'; 
    $counter++; 
} 

Добавлен счетчик не перебирать в то время как петли до конца массива. Функция count() возвращает количество элементов в массиве. Это решение печатает все вхождения вашего номера. Чтобы иметь лучший код, изменить имена переменных:

$numbers = array(1,3,5,7,9,11,13); 
$target = 3; 
$counter = 0; 
while($counter < count($numbers)) { 
    if ($numbers[$counter] == $target) 
     echo $target.' is in the row'; 
    $counter++; 
} 
+0

Здравствуйте. Большое спасибо за все ваши быстрые ответы :-) Когда я повторяю это, я просто получаю пустую страницу. Строка: "($ counter McDuck4

+0

была неудачная инициализация php-массива - после исправления она работает. – cyan

+0

Большое спасибо за ваш ответ :-) – McDuck4

1

Вы ищете in_array. Это проверяет, является ли значение существует в массиве, в виде:

in_array (mixed $needle , array $haystack) 

Таким образом, в вашем случае, вы хотите сделать:

$a = [1,3,5,7,9,11,13]; 
$s = 3; 

if (in_array($s, $a)) { 
    echo $s.' is in the row'; 
} 
3

Ваше while условие гласит: «While значение $a равно 3 ", но $a - это массив, поэтому его значение никогда не может быть 3. Цикл никогда не будет выполнен. В PHP, мы должны написать:

if (in_array($s, $a)) 
    echo $s, ' was found in the array'; 

Или, если вы настаиваете на письменном виде петли:

foreach ($a as $key => $value) 
{ 
    if ($value == $s) 
    { 
     echo $s, ' was found at offset ', $key; 
     break;//end terminate loop 
    } 
} 

Конечно, можно было бы написать:

for ($i=0, $j=count($a);$i<$j;++$j) 
{ 
    if ($a[$i] == $s) 
    {//you could move this condition to the loop itself, even 
     echo $s, ' found in array at offset ', $i; 
     break; 
    } 
} 

Вы можете, если вы хотите использовать цикл while, но это не лучший выбор для вашего конкретного случая. Просто прочитайте руководство по php.net. Существует множество функций array_ *, и есть много способов перебора ваших данных.


Другое беспокойство вы используете имя массива в качестве своего рода-указателя C-стиля: $a++; в C, указатель может быть увеличен, чтобы установить его, чтобы указать на следующее значение в массиве (если новые адрес памяти действителен, и указатель действителен, и все другие вещи, о которых вам нужно беспокоиться в C). PHP. не работа так как есть. Массив не является массивом: это хэш-карта. поэтому приращение массива бессмысленно и, скорее всего, будет ошибкой. Цикл for является наиболее близким к тому, чтобы вы могли перемещаться по массиву с помощью оператора ++.

1
foreach($a as $b) { 
    if($b == 3)  
     echo $b.' is in the row'; 
} 
+0

Почему это негативно обозначено? это неправильная процедура? – Jobayer

+0

, потому что это не эффективно делать это (in_array ($ s, $ a) - это правильный способ сделать это), а кто-то способен серьезно, то в вопросе говорится, что человек просто учится и испытывает проблемы с петлями, поэтому я думаю, что ваш ответ действительно. имеют upvote – StormRideR

0

Есть два способа сделать это,

Во-первых, вы можете перебрать все элементы в массиве, используя foreach() петлю.

Таким образом, вы можете пройти через все их, и если у вас есть несколько условий, это сделает ваш код более читабельным.

И пример этого цикла, как это:

foreach($array as $array_item) { 
    if($array_item === 3) { 
     echo "3 is in the array"; 
    } 
} 

Альтернативой является использование встроенной функции, чтобы найти, если что-то в массиве. Это, вероятно, намного быстрее, хотя я не сравнивал эту разницу.

if(in_array(3, $array)) { 
echo "3 is in the array"; 
} 
0

вы можете использовать array_search, in_array и forearch или петли для itertate через массив.

0

Для целей обучения

$a = [1,3,5,7,9,11,13]; 
    $s = 3; 

for($i=0;$i<count($a);$i++) 
{ 
if($a[$i]==$s){ 
    echo $s.' is in the row'; 
} 
} 

конечно в реальной жизни

if (in_array(3, $a)) { 
// Do something 
} 

будет лучше;

-1
<?php 
    $a = [1,3,5,7,9,11,13]; 
    $s = 3; 
    for($a=0;$a < 20; $a++) 
    { 
     while($a == 3) { 
     echo $s.' is in the row'; 
     //$a++; 
     } 
    } 
    ?> 
+0

вы перезаписали массив $ a с помощью int (for ($ a = 0; ...), так что это нехорошо .. но реквизит для попытки, просто попробуйте немного осторожнее с ответами. – StormRideR