Шаг 16 - Функции работы с массивами

Рассмотрев минимальное подмножество функций работы с sql-сервером, перейдем к другим частям "джентльментского набора".

Пока верстался номер...;) На сайте "How IT works", в серии статей по PHP опубликовано описание работы с массивами в PHP. Как нельзя кстати!

"Массивных" функций в PHP целых 46 штук. Причем штук 20 из них появились в 4-й версии PHP. Это в основном группа функций вида ARRAY_xxxxx, где xxxxx - функциональность.

Функция ARRAY() - самая основная в этой группе. Она предназначена для создания массива из списка.

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

Это пример взят из мануала. Вполне удачный. Что мы тут видим? Создается ассоциативный массив, первый элемент которого представляет ассоциативный массив из трех элементов, второй - обычный массив из 6-ти элементов (отсчет индексов ведется с нуля) и третий - обычный массив из трех элементов, индекс первого из которых - "0", второго - "5" и третьего - "6" (следующий после индекса предыдущего элемента).

Как достучаться до элементов массива? Ну, например, так:

echo $fruits["fruits"]["a"];

Результат:

orange

Или так:

foreach($fruits["fruits"] as $k => $v) {
	echo "$k => $v<br>";
}

Видим:

a => orange
b => banana
c => apple

И, наконец, весь массив:

foreach($fruits as $k => $v) {
	foreach($v as $k2 => $v2) {
		echo "$k2 => $v2<br>";
	}
}

Получаем:

a => orange
b => banana
c => apple
0 => 1
1 => 2
2 => 3
3 => 4
4 => 5
5 => 6
0 => first
5 => second
6 => third

В примерах задействован оператор языка FOREACH. Этот оператор появился в 4-й версии PHP. Для 3-й версии для получения того же результата потребуется задействовать сразу три важных функции: RESET(), EACH() и LIST().

RESET(массив) устанавливает внутренний указатель массива (указатель на текущий обрабатываемый элемент) на начало массива. EACH(массив) возвращает ассоциативный массив из 4-х элементов:

reset($fruits["fruits"]);
$arr=each($fruits["fruits"]);

Выводит:

1 => orange
value => orange
0 => a
key => a

Или в более общем виде:
$arr["0"] => {$key|$index}, $arr["1"] => $value, $arr["key"] => {$key|$index}, $arr["value"] => $value, где $key - ключ в ассоциативном массиве, $index - индекс для обычного массива,$value - значение ключа или индекса. Внутренний указатель перемещается на следующий элемент. Если достигнут конец массива, то вернется false. И LIST(список переменных) присваивает последовательно элементы массива переменным, указанным в параметрах функции. Например, конструкция

list(,,$a,$b)=array(1,2,3,4,5,6);

присвоит переменным $a и $b значения третьего и четвертого элементов массива(первый, второй и все остальные после четвертого мы "прокинули"). Кстати, в примере с while-list-each мы так и поступили - использовали в LIST() только первые два элемента возвращаемого EACH() массива.

Теперь пример, аналогичный FOREACH-конструкции, приведенной в начале шага:

echo "<table border=0>";
reset($fruits);
while((list($k,$v)=each($fruits))) {
	echo "<tr><td>$k:</td><td></td></tr>";
	reset($v);
	while((list($k2,$v2)=each($v))) {
		echo "<tr><td></td><td>$k2 => $v2</td></tr>";
	}
}
echo "</table>";

Еще три функции навигации по массивам: CURRENT(массив) возвращает значение текущего элемента массива; если достигнут конец массива - вернется false (при этом для пустого массива также вернется false). NEXT(массив) и PREV(массив) - перемещение внутреннего указателя вперед/назад. Как обычно, достижение начала/конца массива сопровождается возвратом false.

END(массив) переместит указатель на конец массива - антоним RESET-а!

В следующем шаге продолжим рассмотрение массивов.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Константин Платонов - 28.11.2000