>>>

Проектирование, разработка и оптимизация веб-приложений

Использование массивов

Основное назначение массивов в PHP - организация групп связанных значений. Каждый элемент массива имеет индекс (ключ) и значение. Индекс элемента массива указывается в квадратных скобках после имени массива. Для того, чтобы обратиться к пятому элементу массива $array1, надо написать:

$array1[5]

Помните, что по умолчанию массив начинается не с первого элемента, а с нулевого.

Индекс может быть как числом, так и текстовой строкой. Массив со строковыми индексами называют ассоциативным, а сами индексы - именами элементов. Например, цены на товары хранятся в ассоциативном массиве $prices, индексами которого являются наименования товаров. Чтобы получить значение цены на конкретный товар, надо написать:

$prices["яйца 10 шт. 1 сорт"]

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

$array3[0][4][1]
$цены["овощи"]["помидор"]
$список[1]["фамилия"]

Создание массива

Массив можно создать с помощью функции array(), параметры которой и составляют массив. Параметры могут задаваться парами "ключ=>значение". Если при создании массива ключ не указывается, то индекс определяется положением элемента в массиве (начиная с 0). Например:

$рост = array (174, 181, 166); //Массив с индексацией, начинающейся с нуля
$цена = array ("помидоры" => 15, "огурцы" => 12); //Ассоциативный массив
$данные = array (
         "Иванов" => array ("рост" => 174, "вес"  => 68),
         "Петров" => array ("рост" => 181, "вес"  => 90),
         "Сидоров" => array ("рост" => 166, "вес"  => 73)); //Двухмерный массив

Массивы можно создать и другим способом - непосредственно. Например:

$фрукты[] = "яблоко";
$фрукты[] = "груша";
$фрукты[] = "слива";
$цена["помидор"] = 15;
$цена["огурец"] = 12;

Индексы элементов неассоциативного массива можно не указывать. PHP автоматически вычислит их. Если же указать индексы таким образом:

$фрукты[0] = "груша";
$фрукты[5] = "яблоко";

то в массиве будет два элемента, причем последний с индексом 5. Элементы 1 - 4 не инициализируются.

Можно создать массив с помощью функции array(), а затем добавить к нему новый элемент:

$фрукты = array("яблоко","груша","слива");
...
$фрукты[] = "персик";

Подсчет количества элементов

Количество элементов в массиве можно определить с помощью функций count() или sizeof().

Пример 1

<html>
<head>
<title>Размер массива</title>
</head>
<body>
<?php
$фрукты = array("яблоко", "груша", "слива", "персик");
echo "Размер массива \$фрукты равен ".count($фрукты)."<br>";
echo "Последний элемент массива \$фрукты - ".$фрукты[count($фрукты)-1]."<br>";
?>
</body>
</html>

Для доступа к последнему элементу надо вычесть 1 из размера массива, так как индексация массива начинается с нуля. Для вывода зарезервированного символа "$" перед знаком доллара стоит символ обратной косой черты "\".

Частоту вхождения элементов в массив можно определить с помощью функции array_count_values(). Эта функция возвращает массив, в котором ключами являются элементы исследуемого массива, а значениями - частоты их вхождения в исследуемый массив.

Пример 2

<html>
<head>
<title>Размер массива</title>
</head>
<body>
<?php
$фрукты = array("яблоко", "груша", "слива", "персик", "груша");
print_r (array_count_values($фрукты));
?>
</body>
</html>

Функция print_r() отображает ключи и значения массива, указанного в аргументе.

Просмотр массива в цикле

Для итерационного просмотра содержимого массива служит функция foreach. С ее помощью можно просмотреть и простой (проиндексированный числами) массив, и ассоциативный, и многомерный.

Пример 3

<html>
<head>
<title>Просмотр массива</title>
</head>
<body>
<?php
$фрукты = array("яблоко", "груша", "слива", "персик", "груша");
foreach ($фрукты as $фрукт)
  {
  echo  "$фрукт<br>";
  }
?>
</body>
</html>

Пример 4

<html>
<head>
<title>Просмотр ассоциативного массива</title>
</head>
<body>
<?php
$цена = array ("помидоры" => 15, "огурцы" => 12);
foreach ($цена as $овощи => $руб)
  {
  echo  "$овощи стоят $руб руб.<br>";
  }
?>
</body>
</html>

Пример 5

<html>
<head>
<title>Просмотр двухмерного массива</title>
</head>
<body>
<?php
$данные = array (
         "Иванов" => array ("рост" => 174, "вес"  => 68),
         "Петров" => array ("рост" => 181, "вес"  => 90),
         "Сидоров" => array ("рост" => 166, "вес"  => 73));
foreach ($данные as $фамилия => $данные1)
  {
  echo  "<br>$фамилия:<br>";
  foreach ($данные1 as $параметр => $pp)
    {
    echo  "$параметр = $pp<br>";
    }
  }
?>
</body>
</html>

print_r - Вывод всех эллементов массива. Удобная функция для отладки.

<?php
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x','y','z'));
print_r ($a);
?>

Управление массивами

Для управление массивами в PHP существует целый ряд специализированных функций. Наиболее употребимыми являются:

Сортировки

Сортировать можно как простые, так и ассоциативные массивы. Для сортировки массивов в PHP существуют определенные функции:

Поиск элемента

Для проверки наличия элемента в массиве существуют функции:

Пример 13

<html>
<head>
<title>Поиск элемента в массиве</title>
</head>
<body>
<?php
$a = array("первый" => 6, "второй" => 2, "третий" => 1);
if (in_array (2, $a)) echo "2 нашли!<br>";
echo "ключ найденного элемента - ".array_search(2, $a);
?>
</body>
</html>

Использование итератора для обхода многомерного массива

Пример 13

// Многомерный массив
$arr = [
    ["sitepoint", "phpmaster"],
    ["buildmobile", "rubysource"],
    ["designfestival", "cloudspring"],
    "not an array"
];
$iter = new RecursiveArrayIterator($arr);
// Цикл по объекту
// Нужно создать экземпляр RecursiveIteratorIterator
foreach(new RecursiveIteratorIterator($iter) as $key => $value) {
    echo $key . ": " . $value . "<br>";
}

Размер шрифта:
А
А
А
Цвет сайта:
A
A
A
Изображение:
Вкл.
Выкл.
Обычная версия