Окт 092011
 

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

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

<?
$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 всегда будет равна нулю. Это приведет к зависанию браузера.

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

Дорогие читатели! Мною было принято решение закрыть комментарии на блоге. Теперь все обсуждения переносятся на недавно открытый форум, ввиду того, что формат сообщений там намного удобней для обсуждения. Не стесняйтесь задавать любые вопросы по тематике блога! Я всегда на связи.
Перейти на форум
.
 Опубликовано в 3:53 пп

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

  1. А можете добавить в статью полный пример?

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

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

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

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

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

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

  4. Спасибо, буду изучать.

Извините, форма комментирования закрыта в данный момент.