Изучение PHP – урок 4: массивы и циклы

В данном уроке мы рассмотрим работу с массивами и циклами.

Массивы — это переменные, которые могут содержать в себе более одного значения. Пример массива

<?
$array = array("name" => "Ozim", "website"=> "subcoder.ru");
// аналогично можно использовать 
//$array['name']='Ozim';
//$array['website']='subcoder.ru';
echo $array['name']; // Ozim
echo $array['website']; // subcoder.ru
?>

или

<?
$array = array(0 => "Ozim", 1=> "subcoder.ru");
echo $array[0]; // Ozim
echo $array[1]; // subcoder.ru
?>

Массивы помогают более компактно записывать код, а во многих случаях без них вообще не обойтись.

Примечание: Обратите внимание: индекс массива (то, что находится внутри квадратных скобок) обрамляется кавычками, в случае если он является строкой ($var[‘bar’]) и не обрамляется ничем, если он число.

Рассмотрим следующий пример обработки данных из формы. В нашей форме текстовые поля будут генерироваться динамически, то есть, мы не будем писать html код, повторяя 20 раз текстовое поле, для создания текстовых полей мы используем цикл for

<form name="form1" method="post" action="">
<?
for ($i=0; $i<20; $i++)
{
	echo 'Строка '.$i.'<input type="text" name="input[]"><br>';	
}
?>
<input type="submit" name="go" id="go" value="Отправить">
</form>

Если мы откроем страницу с вышеприведенным кодом в браузере, мы увидим что у нас сгенерировались 20 полей типа text.

Небольшие пояснения к коду:

for () — условие цикла. Внутри скобок мы говорим до каких пор цикл будет продолжаться.

$i=0; — назначаем некоей переменной $i значение 0

$i<20; говорим, что цикл будет идти до тех пор, пока значение переменной $i будет менее 20, другими словами, пока выражение $i<20; будет истинно.

$i++; — аналог записи $i=$i+1;, то есть, при каждом проходе цикла следует увеличивать текущее значение переменной $i на один.

{} — пока условия цикла будут соблюдаться — выполняем то, что находится внутри фигурных скобок.

Итак, с этим разобрались. Теперь нам нужно принять переданные пользователем в форме данные. Как видите, имена у полей формы идентичны — input[]. Квадратные скобки стоят не случайно. По умолчанию при принятии данных из формы PHP «подставит» туда цифры: от 0 и до тех пор, пока не закончатся поля (в нашем случае от нуля до 19), и имена полей будут теперь выглядеть как input[0], input[1] и тп.

Примечание: в отличии от людей, компьютеры считают начиная не с единицы, а с нуля, потому PHP и начинает свой отсчет с нуля.

Теперь после нажатия пользователем кнопки отправки данных мы получим массив с именем $_POST[‘input’]. И если мы попробуем выше кода с формой вставить код такого содержания

<?
if ($_POST)
{
	echo $_POST['input'];	
}
?>

мы получим ответ интерпретатора: array, что является предупреждением: дружище, там не одна переменная, а фиг знает сколько, я не знаю которую из них тебе выводить.

Для того, чтобы разобрать наш массив, мы можем опять же воспользоваться циклом.

Показать »

<?
if ($_POST)
{
	foreach($_POST['input'] as $singleinput) {
	echo $singleinput;	
	echo '<br>';
	}
}
?>

<form name="form1" method="post" action="">
<?
for ($i=0; $i<20; $i++)
{
	echo 'Строка '.$i.'<input type="text" name="input[]" value="Это данные из поля номер '.$i.'"><br>';	
}
?>
<input type="submit" name="go" id="go" value="Отправить">
</form>

Пояснения: foreach — это такая спец функция, которая занимается ни чем иным, как разбором массивов.

Дословный перевод ее работы:

foreach($_POST[‘input’]  as $singleinput) — для каждой имеющейся переменной в массиве input назначить присвоение значения каждого разбора цикла в переменную $singleinput, т.е. в каждом проходе цикла переменная $singleinput будет принимать очередное в массиве значение, и после очередного прохода эта переменная будет переназначаться новым (следующим)  значением из массива…

после таких слов многие крутые кодеры захотят лично забросать меня гнилыми яблоками и помидорами, но я честно признался во вступлении, — терминология мое слабое место, потому изъясняюсь как могу, потому те, кому не нравится, могут добавить url моего блога в blacklist своего фаервола и смело идти нафиг :)

Рассмотрим другой цикл — while

<?
$i=0;
	while($i<20)
		{
			$i++;
			echo 'Номер '.$i.'<br>';	
		}

?>

Перевожу: переменной $i назначено значение 0. Условие цикла гласит: до тех пор, пока значение переменной $i будет меньше 20, делаем то, что находится внутри фигурных скобок. а внутри скобок, при каждом проходе цикла мы увеличиваем текущее значение переменной $i на 1, чтобы  она у нас не была равна нулю вечно.

Примечание: если убрать $i++; из цикла, — цикл станет вечным, так как i всегда будет равна нулю. Это приведет к зависанию браузера.

Пока все, если что не ясно — комменты ниже.

Изучение PHP – урок 4: массивы и циклы: 6 комментариев

  1. dobrmir

    Это имел в виду насчет этого:
    обрамляется кавычками, в случае если он является строкой ($var[‘bar’]) и не обрамляется ничем, если он число.

    1. ОзимОзим Автор записи

      а что не понятно? если индекс — число ($var[12]) — кавычки не нужны, если строка ($var[‘str’]) — нужны.

  2. dobrmir

    Непонятно, куда подставлять цифры, а куда буквы, так как не видно примера. $var — это служебное зарезервированное имя?

    1. ОзимОзим Автор записи

      Цифры или буквы подставлять по ситуации :)
      в примерах есть вариант и с цифрами и с буквами. Также цифры обязательны в такой записи, например

      $var[]='value1';
      $var[]='value2';
      $var[]='value3';

      в данном примере, если мы напишем ниже
      echo $var[0] — то получим значение value1, при выводе $var[1] — значение value2 — и так далее.
      Нет, $var это просто пример переменной.

Комментарии запрещены.