В данном уроке мы рассмотрим работу с массивами и циклами.
Массивы – это переменные, которые могут содержать в себе более одного значения. Пример массива
<? $array = array("name" => "Ozim", "website"=> "blog.ozim.studio"); // аналогично можно использовать //$array['name']='Ozim'; //$array['website']='blog.ozim.studio'; echo $array['name']; // Ozim echo $array['website']; // blog.ozim.studio ?>
или
<? $array = array(0 => "Ozim", 1=> "blog.ozim.studio"); echo $array[0]; // Ozim echo $array[1]; // blog.ozim.studio ?>
Массивы помогают более компактно записывать код, а во многих случаях без них вообще не обойтись.
Примечание: Обратите внимание: индекс массива (то, что находится внутри квадратных скобок) обрамляется кавычками, в случае если он является строкой ($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, что является предупреждением: дружище, там не одна переменная, а фиг знает сколько, я не знаю которую из них тебе выводить.
Для того, чтобы разобрать наш массив, мы можем опять же воспользоваться циклом.
[spoiler]
<? 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>
[/spoiler]
Пояснения: 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 всегда будет равна нулю. Это приведет к зависанию браузера.
Пока все, если что не ясно – комменты ниже.
Это имел в виду насчет этого:
обрамляется кавычками, в случае если он является строкой ($var[‘bar’]) и не обрамляется ничем, если он число.
а что не понятно? если индекс – число ($var[12]) – кавычки не нужны, если строка ($var[‘str’]) – нужны.
Непонятно, куда подставлять цифры, а куда буквы, так как не видно примера. $var – это служебное зарезервированное имя?
Цифры или буквы подставлять по ситуации :)
в примерах есть вариант и с цифрами и с буквами. Также цифры обязательны в такой записи, например
в данном примере, если мы напишем ниже
echo $var[0] – то получим значение value1, при выводе $var[1] – значение value2 – и так далее.
Нет, $var это просто пример переменной.
Спасибо, буду изучать.