Php урок 3. Массивы и циклы в Php

Автор: | 18.08.2015

Функции PHP . Функции для работы с массивами

array
(PHP 3, PHP 4, PHP 5 )
array — Создать массив

Описание

array array ( [mixed …] )

Возвратить массив параметров. Параметры могут быть заданы с индексом при помощи оператора =>. См. раздел руководства array type для ознакомления с понятием массив.
Замечание: array() — это языковая конструкция для представления массивов, а не функция.
Синтакс «index => values», разделённые запятыми, определяет индексы и их значения. Индекс может быть строкой или целым числом. Если индекс опущен, будет автоматически сгенерирован числовой индекс, начиная с 0. Если индекс — число, следующим сгенерированным индексом будет число, равное максимальному числовому индексу + 1. Обратите внимание, что если определены два одинаковых индекса, последующий переназначит предыдущий.
Использование запятой после последнего определённого элемента массива, в отличие от обычного поведения, является приемлемым синтаксисом.
Последующие примеры демонстрируют создание двухмерного массива, определение ключей ассоциативных массивов и и способ генерации числовых индексов для обычных массивов, если нумерация начинается с произвольного числа.

Пример 1. Пример использования array()

<?php
$fruits = array (
"fruits" => array("a" => "orange", "b" => "banana", "c" => "apple"),
"numbers" => array(1, 2, 3, 4, 5, 6),
"holes" => array("first", 5 => "second", "third")
);
?>

Пример 2. Автоматическая индексация array()

<?php
$array = array(1, 1, 1, 1, 1, 8 => 1, 4 => 1, 19, 3 => 13);
print_r($array);
?>

Результат выполнения данного примера:

Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 13
[4] => 1
[8] => 1
[9] => 19
)

Обратите внимание, что индекс ‘3’ определён дважды, и содержит последнее значение 13. Индекс 4 определён после индекса 8, и следующий сгенерированный индекс (значение 19) — 9, начиная с максимального индекса 8.
Этот пример создаёт массив, нумерация которого начинаяется с 1.

Пример 3. array(), нумерация которого начинаяется с 1

<?php
$firstquarter = array(1 => 'January', 'February', 'March');
print_r($firstquarter);
?>

Результат выполнения данного примера:

Array
(
[1] => January
[2] => February
[3] => March
)

Как и в Perl, вы имеете доступ к значениям массива внутри кавычек. Однако в PHP нужно заключить ваш массив в фигурные скобки.

Пример 4. Доступ к массиву внутри кавычек

 

<?php

$foo = array('bar' => 'baz');
echo "Hello {$foo['bar']}!"; // Hello baz!

?>

Цикл for и массивы данных

Цикл for самый сложный цикл в PHP. Он ведет себя так же как его аналог в языке C. Синтаксис цикла for следующий:
for (expr1; expr2; expr3)
statement
Первое выражение (expr1) всегда вычисляется (выполняется) только один раз в начале цикла.
В начале каждой итерации оценивается выражение expr2. Если оно принимает значение TRUE, то цикл продолжается, и вложенные операторы будут выполнены. Если оно принимает значение FALSE, выполнение цикла заканчивается.
В конце каждой итерации выражение expr3 вычисляется (выполняется ).
Каждое из выражений может быть пустым или содержать несколько выражений, разделенных запятыми. В expr2 все выражения, разделенные запятыми, вычисляются, но результат берется из последнего. Если выражение expr2 отсутствует, это означает, что цикл будет выполняться бесконечно. (PHP неявно воспринимает это значение как TRUE, также, как в языке C). Это может быть не столь бесполезно, сколь вы могли подумать, так как часто необходимо прервать цикл, используя условный оператор break вместо использования выражения в цикле for, которое принимает истинное значение.

Рассмотрим следующие примеры. Все из них отображают числа от 1 до 10:

 

<?php
/* пример 1 */

for ($i = 1; $i <= 10; $i++) {
echo $i;
}

/* пример 2 */

for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
echo $i;
}

/* пример 3 */

$i = 1;
for (; ; ) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}

/* пример 4 */

for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>

Конечно, первый пример кажется самым хорошим (или, возможно, четвертый), но вы можете обнаружить, что возможность использовать пустые выражения в циклах for может стать удобной во многих случаях.
PHP также поддерживает альтернативный синтаксис с двоеточием для циклов for.

for (expr1; expr2; expr3):
statement

endfor;

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

 

<?php
/*
* Это массив с некоторыми данными, которые мы хотим изменить
* при работе цикла.
*/
$people = array(
array('name' => 'Kalle', 'salt' => 856412),
array('name' => 'Pierre', 'salt' => 215863)
);

for($i = 0; $i < count($people); ++$i) {
$people[$i]['salt'] = mt_rand(000000, 999999);
}
?>

Вышеприведенный код может работать медленно, так как размер массива вычисляется в каждой итерации. Поскольку размер не меняется, цикл может быть легко оптимизирован с помощью промежуточной переменной, в которую будет записан размер массива, вместо повторяющихся вызовов функции count():

 

<?php
$people = array(
array('name' => 'Kalle', 'salt' => 856412),
array('name' => 'Pierre', 'salt' => 215863)
);

$size = count($people);
for($i = 0; $i < $size; ++$i) {
$people[$i]['salt'] = mt_rand(000000, 999999);
}
?>

Цикл while

while
(PHP 4, PHP 5)
Циклы while являются простейшим видом циклов в PHP. Они ведут себя так же, как и их коллеги из языка C. Простейшей формой цикла while является следующее выражение:
while (expr)
statement
Смысл выражения while очень прост. Оно указывает PHP выполнять вложенные выражения повторно до тех пор, пока выражение в самом while является TRUE. Значение выражения expr проверяется каждый раз перед началом цикла, поэтому даже если значение выражения изменится в процессе выполнения вложенных выражений в цикле, выполнение не прекратится до конца итерации (каждый раз, когда PHP выполняет выражения в цикле — это одна итерация). В том случае, если выражение while равно FALSE с самого начала, вложенные выражения ни разу не будут выполнены.
Также, как и с оператором if, вы можете группировать несколько выражений внутри одного цикла while, заключая эти выражения между фигурными скобками или используя альтернативный синтаксис:

while (expr):
statement

endwhile;

Следующие примеры идентичны, и оба выведут числа от 1 до 10:

 

<?php
/* пример 1 */

$i = 1;
while ($i <= 10) {
echo $i++; /* выводится будет значение переменной
$i перед её увеличением
(post-increment) */
}

/* пример 2 */

$i = 1;
while ($i <= 10):
echo $i;
$i++;
endwhile;
?>

Задание,

Создать многомерный массив в каждом элементе, которого будут храниться четыре переменные
1. Описание картинки
2. Подпись к картинке
3. Путь к картинке
4. Ключевые слова к картинке.
Создать 6ть элементов такого массива
Вывести с помощью абсолютного позиционирования в два ряда.
Размеры и позиции задавать через стили top left width height.
Картинку позиционировать по центру imageholder это держатель картинки.
Снизу выводить описание и ключевые слова.

 

if($_GET['submit']=="send"){
$g=$_GET['fruit'];
}
$f=array("banan"=>"банан","apple"=>"яблоко","grusha"=>"груша","fruits"=>"фрукты");
$fr = explode(" ", trim($g));

echo "<pre>";
print_r($fr);
echo "</pre>";
foreach ($fr as $k=>$v){
  echo "
  <h3 style=' background:#ff0;'>{$f[$v]} </h3>
  <img height='200' src='images/{$fr[$k]}.jpg'>
  ";
  
}

?>
<div style="width:100%;float:left;">
<form action="" method="get">
<p><input name="fruit" type="text"></p>

<input type="submit" name="submit" value="send">
</form>
</div>

 

$arr=array("имя"=>"Петр","age"=>27,"tel"=>"87212");
$arr["имя"]="Петя";
echo "<pre>";
print_r($arr) ;
echo "</pre>";
echo $arr['age']. "<br>";
foreach($arr as $key=>$value){
  echo "key: ".$key . "value:" .$value . "<br>";
}

$book1=array('author'=>'Л.Н.Толстой','title'=>'Война и мир','age'=>'1998');
$book2=array('author'=>'Гоголь','title'=>'Мертвые души','age'=>'2001');
$book3=array('author'=>'Бэдроус','title'=>'Тарзан','age'=>'2004');
$book4=array('author'=>'Жюль Верн','title'=>'Дети капитана Гранта','age'=>'1996');

$shelf1[1]=$book1;
$shelf1[2]=$book2;

$shelf2[1]=$book3;
$shelf2[2]=$book4;

$bookshelf[1]=$shelf1;
$bookshelf[2]=$shelf2;

$bookshelf[3][1]['author']="Уэльс";
$bookshelf[3][1]['title']="Машина времени";
$bookshelf[3][1]['age']="2006";

echo "<pre>";
print_r($bookshelf);
echo "</pre>";
 
/* Выведите на экран всю информацию о книгах, авторы которых: Гоголь и Жюль Верн*/
echo $bookshelf[3][1]['author'] ." ";
echo $bookshelf[3][1]['title'] . " ";
echo $bookshelf[3][1]['age']." ";

foreach($bookshelf[1][2] as $b=>$n){
  echo $n . " " . "<br>";
}
foreach($bookshelf[2][2] as $b=>$n){
  echo $n . " ";
}
<meta charset='utf-8'>
<?
for ($i=0;$i<=70;$i+=10)// прямой цикл от 0 до 70 с шагом 10
  {
  echo "$i<br>";	//  выводим значение переменной i
  }
for ($i=70;$i>=0;$i--) // обратный цикл от 70 до 0
  {
  echo "$i<br>";	
  }

$kr=0;// переменные которые включают цветовой канал. r g b соответственно
$kg=0;
$kb=0;
if($_GET['page']==1)// если страница 1 то активируем красный цвет
{
$kr=1;	
}
if($_GET['page']==2)
{
$kg=1;	
}

for ($i=0;$i<1000;$i++) //задаем массив стилей для 1000 дивов
  {
    $style[$i]['opacity']=mt_rand(0, 50)/100;	
    $style[$i]['top']=mt_rand(40, 1000);
    $style[$i]['left']=mt_rand(0,1000);
    $style[$i]['r']=$kr*mt_rand(0, 255);
    $style[$i]['g']=$kg*mt_rand(0, 255);
    $style[$i]['b']=$kb*mt_rand(0, 255);
    $style[$i]['width']=mt_rand(0, 300);
    $style[$i]['height']=mt_rand(0, 300);
  }

for ($i=0;$i<1000;$i++)//выводим теги div с заданными стилями
  {
  echo "<div style='
  position:absolute;
  background-color:rgb({$style[$i]['r']},{$style[$i]['g']},{$style[$i]['b']});
  top:{$style[$i]['top']}px;
  left:{$style[$i]['left']}px;
  width:{$style[$i]['width']}px;
  height:{$style[$i]['height']}px;
  opacity:{$style[$i]['opacity']};
  '></div>";
  }
  
  for ($i=1;$i<=10;$i++)//выводим пагинацию
  {
  echo "<a href='?page=$i'>$i</a> | ";	
    
  }
  echo "<br>Вы находитесь на странице - ".$_GET['page'];// выводим страницы
  
  $i=0;
  while($i<1000)// пример цикла while
  {
  echo $i++;
  echo "<br>";
  }
   
foreach ($style as $s)// пример цикла foreach
{
echo "<div style='
  position:absolute;
  background-color:rgb({$s['r']},{$s['g']},{$s['b']});
  top:{$s['top']}px;
  left:{$s['left']}px;
  width:{$s['width']}px;
  height:{$s['height']}px;
  opacity:{$s['opacity']};
  '></div>";
  
} 


for ($i=0;$i<1000;$i+=10)//пример вложенного цикла. выводим поле из div 1000 на 1000 пикселей
{
  for ($j=0;$j<1000;$j+=10)
  {
  $r=mt_rand(0, 255);
  $g=mt_rand(0, 255);
  $b=mt_rand(0, 255);
  echo "<div style='
  position:absolute;width:10px;height:10px;
  left:$i;top:$j;	background-color:rgb($r,$g,$b);
  '>
  </div>";
  }

}
  
?>