Рассмотрев минимальное подмножество функций работы с 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-а!
В следующем шаге продолжим рассмотрение массивов.