Сделай Сам Свою Работу на 5

Создание/модификация с помощью синтаксиса квадратных скобок





 

Можно изменять существующий массив, явно устанавливая значения в нём.

Это выполняется присвоением значений массиву при указании в скобках ключа. Кроме того, вы можете опустить ключ, в этом случае добавьте к имени переменной пустую пару скобок ("[]").

Пример 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 Все материалы защищены законодательством РФ.