Создание/модификация с помощью синтаксиса квадратных скобок
Можно изменять существующий массив, явно устанавливая значения в нём.
Это выполняется присвоением значений массиву при указании в скобках ключа. Кроме того, вы можете опустить ключ, в этом случае добавьте к имени переменной пустую пару скобок ("[]").
Пример 3.2.1:
$arr[key] = value;
$arr[] = value;
// key может быть integer или string
// value может быть любым значением
Если массив $arr ещё не существует, он будет создан. Таким образом, это ещё один способ определить массив. Для изменения определённого значения просто присвойте элементу с его ключом новое значение. Если вы хотите удалить пару ключ/значение, вам нужно использовать функцию unset().
Пример 3.2.2:
<?
$arr = array(5 => 1, 12 => 2);
$arr[] = 56; // В этом месте скрипта это
// эквивалентно $arr[13] = 56;
$arr["x"] = 42; // Это добавляет к массиву новый
// элемент с ключом "x"
unset($arr[5]); // Это удаляет элемент из массива
unset($arr); // Это удаляет массив полностью
?>
Если вы не укажете в скобках ключ, то будет взят максимальный из существующих целочисленных индексов, и новым ключом будет это максимальное значение + 1. Если целочисленных индексов ещё нет, то ключом будет 0 (ноль). Если вы укажете ключ, которому уже присвоено значение, оно будет перезаписано.
Начиная с PHP 4.3.0, вышеописанное поведение генерации индекса изменено. Теперь, если вы будете использовать массив, в котором максимальным в настоящий момент является отрицательный ключ, то следующий созданный ключ будет нулевым (0). Раньше новым индексом становился самый большой существующий ключ + 1, так же как и у положительных индексов.
Обратите внимание, что максимальный числовой ключ, используемый для этого, не обязательно должен существовать в массиве в настоящий момент. Он просто должен был существовать с момента последнего переиндексирования массива. Это иллюстрирует следующий пример 3.2.3:
<?
// Создаем простой массив.
$array = array(1, 2, 3, 4, 5);
print_r($array);
// Теперь удаляем каждый элемент, но сам массив оставляем нетронутым:
foreach ($array as $i => $value) {
unset($array[$i]);
}
print_r($array);
// Создаем элемент (обратите внимание, что новым ключом будет 5,
// а не 0, как вы возможно ожидали).
$array[] = 6;
print_r($array);
// Переиндексация:
$array = array_values($array);
$array[] = 7;
print_r($array);
?>
Вышеприведенный пример выведет следующее:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Array
(
)
Array
(
[5] => 6
)
Array
(
[0] => 6
[1] => 7
)
Замечание по индексированию массивов
Вы всегда должны заключать индекс ассоциативного массива в кавычки. К примеру, пишите $foo['bar'], а не $foo[bar]. Но почему $foo[bar] это неверно? Возможно, вы встречали в старых скриптах следующий синтаксис (пример 3.3.1):
<?
$foo[bar] = 'слово';
echo $foo[bar];
// и т. д.
?>
Это неверно, хотя и работает. Тогда почему же это неверно? Причина в том, что этот код содержит неопределенную константу (bar), а не строку ('bar' - обратите внимание на кавычки), и PHP в будущем может определить константу, которая к несчастью для вашего кода будет иметь то же самое имя. Это работает, потому что PHP автоматически преобразует голую строку (не заключенную в кавычки строку, которая не соответствует ни одному из известных символов) в строку, которая содержит голую строку. Например, если константа с именем bar не определена, то PHP заменит bar на строку 'bar' и использует ее.
Преобразование в массив
Для любого из типов: integer, float, string, boolean и resource, если вы преобразуете значение в массив, вы получите массив с одним элементом (с индексом 0), являющимся скалярным значением, с которого вы начали.
Если вы преобразуете в массив объект (object), вы получите в качестве элементов массива свойства (переменные-члены) этого объекта. Ключами будут имена переменных-членов.
Если вы преобразуете в массив значение NULL, вы получите пустой массив.
Сравнение массивов
Массивы можно сравнивать при помощи функции array_diff() и Операторов массивов (см. выше в этом конспекте).
array array_diff ( array array1, array array2 [, array ...] )
Функция array_diff() возвращает массив, состоящий из значений массива массив_1, которые отсутствуют в любом другом массиве, перечисленном в последующих аргументах. Обратите внимание, что ключи массивов сохраняются.
Пример 3.5.1:
$array1 = array ("a" => "green", "red", "blue", "red");
$array2 = array ("b" => "green", "yellow", "red");
$result = array_diff ($array1, $array2);
В результате выполнения этой программы переменная $result будет содержать array ("blue");. Повторения одного и того же значения в $array1 обрабатываются как одно значение.
Два элемента считаются одинаковыми если и только если (string) $elem1 === (string) $elem2. Другими словами, когда их строковое представление идентично.
Обратите внимание, что эта функция обрабатывает только одно измерение n-размерного массива. Естественно, вы можете обрабатывать и более глубокие уровни вложенности, например, используя array_diff($array1[0], $array2[0]);.
Примеры работы с массивами
Тип массив в PHP является очень гибким, поэтому мы приведем здесь несколько примеров, чтобы продемонстрировать все возможности массивов.
Пример 3.6.1:
<?
// это
$a = array( 'color' => 'red',
'taste' => 'sweet',
'shape' => 'round',
'name' => 'apple',
4 // ключом будет 0
);
// полностью соответствует
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name'] = 'apple';
$a[] = 4; // ключом будет 0
$b[] = 'a';
$b[] = 'b';
$b[] = 'c';
// создаст массив array(0 => 'a' , 1 => 'b' , 2 => 'c'),
// или просто array('a', 'b', 'c')
?>
Пример использования array()
Пример 3.6.2:
<?
// Массив как карта (свойств)
$map = array( 'version' => 4,
'OS' => 'Linux',
'lang' => 'english',
'short_tags' => true
);
// исключительно числовые ключи
$array = array( 7, 8, 0, 156, -10);
// это то же самое, что и array(0 => 7, 1 => 8, ...)
$switching = array( 10, // ключ = 0
5 => 6,
3 => 7,
'a' => 4,
11, // ключ = 6 (максимальным числовым индексом был 5)
'8' => 2, // ключ = 8 (число!)
'02' => 77, // ключ = '02'
0 => 12 // значение 10 будет перезаписано на 12
);
// пустой массив
$empty = array();
?>
Пример коллекции
Пример 3.6.3:
<?
$colors = array('красный', 'синий', 'зеленый', 'желтый');
foreach ($colors as $color) {
echo "Вам нравится $color?\n";
}
?>
Результат работы приведенного скрипта будет следующий:
Вам нравится красный?
Вам нравится синий?
Вам нравится зеленый?
Вам нравится желтый?
Ещё один пример коллекции
Пример 3.6.4:
<?
foreach ($colors as $key => $color) {
// не будет работать:
//$color = strtoupper($color);
// работает:
$colors[$key] = strtoupper($color);
}
print_r($colors);
?>
Результат работы приведенного скрипта будет следующий:
Array
(
[0] => КРАСНЫЙ
[1] => СИНИЙ
[2] => ЗЕЛЕНЫЙ
[3] => ЖЕЛТЫЙ
)
Обратите внимание, что в настоящее время невозможно изменять значения массива в таком цикле напрямую. Однако можно сделать так:
Следующий пример создает начинающийся с единицы массив.
Пример работы с индексами:
Пример 3.6.5:
<?
$firstquarter = array(1 => 'Январь', 'Февраль', 'Март');
print_r($firstquarter);
?>
Результат работы приведенного скрипта будет следующий:
Array
(
[1] => 'Январь'
[2] => 'Февраль'
[3] => 'Март'
)
Пример заполнения массива:
Пример 3.6.6:
<?
// заполняет массив всеми элементами директории
$handle = opendir('.');
while (false !== ($file = readdir($handle))) {
$files[] = $file;
}
closedir($handle);
?>
Обработка массивов: цикл foreach
Обход массива в цикле в PHP можно организовать при помощи цикла foreach, который имеет следующий синтаксис:
foreach (array as [$key =>] $value)
{
statements;
}
Смысл этого цикла прост: при проходе каждого элемента массива в переменную $key помещается индекс этого элемента, а в переменную $value – его значение. Имена этих двух переменных совершенно произвольны.
Пример 3.7.1:
<?
$car = array("passenger car", "land-rover",
"station-wagon","victoria");
foreach($car as $index => $val)
{
echo("$index -> $val <br>");
}
?>
Как видно из синтаксиса, переменная $key необязательна и может быть опущена (пример 3.7.2):
<?
echo(
"available cars: <br> <ul>"
);
$car = array("passenger car", "land-rover",
"station-wagon","victoria");
foreach($car as $val)
{
echo("<li>$val</li>\n");
}
echo("</ul>");
?>
Многомерные массивы
Для инициализации многомерных массивов используются вложенные конструкции array(). Обход многомерных массивов достигается при помощи вложенных циклов. В следующем примере показаны создание и обход многомерного массива (пример 3.8.1):
<?
$ship = array(
"Passenger ship" => array("Yacht","Liner","Ferry"),
"War ship" => array("Battle-wagon","Submarine","Cruiser"),
"Freight ship" => array("Tank vessel","Dry-cargo ship","Container
cargo ship")
);
foreach($ship as $key => $type)
{
echo(
"<h2>$key</h2>\n"."<ul>\n");
foreach($type as $ship)
{
echo("\t<li>$ship</li>\n");
}
}
echo("</ul>\n");
?>
Результат выполнения этого кода:
Passenger ship
Yacht
Liner
Ferry
War ship
Battle-wagon
Submarine
Cruiser
Freight ship
Tank vessel
Dry-cargo ship
Container cargo ship
3.9. Функции для работы с массивами:
Эти функции позволят вам различными способами оперировать с массивами. Массивы идеально подходят для хранения, изменения и работы с наборами переменных. Поддерживаются одно- и многоразмерные массивы, как созданные пользователем, так и возвращенные в качестве результата какой-либо функцией. Существуют специальные функции для работы с базами данных, облегчающие работу с массивами данных, возвращаемых в результате выполнения запросов; также существуют функции, возвращающие массивы в качестве результата.
Полный список функций для работы с массивами смотрите здесь:
http://www.php.net/manual/ru/ref.array.php
Ниже мы рассмотрим основные, наиболее часто используемые при работе с массивами функции.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|