А это клавиатура, с помощью которой я творю...
http://kurepin.ru/php/array/
Rambler's Top100
Пишем на PHP: Работа с массивами (начало)

Одна из тем на форуме forum.kurepin.ru заставила меня обратить еще раз особое внимание на массивы.

Попробую сделать небольшой обзор по общению с массивами.

Итак. Массивы бывают обыкновенные и ассоциативные. Отличаются они только тем, что в обыкновенных массивах ключами служат целые числа, а в ассоциативных -- сочетания различных знаков.

$personal[1]; // обращение к ячейке обыкновенного массива;

$personal['vova']; // обращение к ячейке ассоциативного массива;


Кстати, при обращении к ячейке ассоциативного массива, не обязательно ключ ячейки брать в кавычки или скобки. Но я вам настоятельно рекомендую это делать.

Массивы в PHP могут иметь любую вложенность измерение, но традиционно используются массивы одно- и двухмерные.

Массив может хранить любую информацию -- от простых чисел до сложных структур.

Объявить массив просто:

var $array1 = array(); // пустой массив

var $array2 = array("vova", "nina", "olga"); // массив с данными


Так объявляют обыкновенный массив. Если же нам надо объявить ассоциативный массив с данными или массив, в котором данные "разбросаны" в далекие друг от друга ячейки, нужно указывать кроме значений ячеек, еще и их ключ (название). Ключ от данных отделяется сочетанием "=>".

var $array3 = array(0 => "vova", 11 => "nina", 543 => "olga");
var $array4 = array("sorokin" => "vova", "bulgakova" => "nina", "zhezlova" => "olga");


В первом случае мы видим массив имен, присвоенных ячейкам с конкретными номерами (все промежуточные ячейки заявлены пустыми), а во втором -- ячейки с именами имеют вместо нумерации -- фамилии.

Чтобы узнать имя Сорокина, нам теперь достаточно спросить массив:

echo $array4['sorokin'];


В общем, это все, что важно знать об объявлении массивов.

Теперь поговорим о том, что мы можем с массивами делать. Разумеется, я не буду останавливаться на том, что в массивах можно хранить данные: читать их, удалять и заменять на новые.

Как проверить существование массива?

Надо заметить, что массив, в стандартных ситуациях, ведет себя так же, как обыкновенная переменная.

if(!isset($array_name)) echo "Нет такого массива!";



Как уничтожить массив?

unset($array_name);

или одну из его ячеек:

unset($array_name[n]);



Как проще всего распечатать содержимое массива?

echo implode(',',$array_name);


где implode -- функция объединения с разделителем.

В данном случае, массив выступает в роли списка переменных.


Если нужно создать массив для одной операции?

Тогда можно воспользоваться функций list(), объединяющей перечисленные в ней переменные в единый массив.

$str="один,два,три";
$list($one, $two,$three)=explode(',',$srt);

Теперь каждая переменная содержит свое слово.

И распечатать:

echo implode(',',list($one, $two, $three));


Можно, конечно, и просто перебрать содержимое массива в цикле:

while($i



Как изменить размеры массива?

Вам не надо заботиться о выделении памяти для новых ячеек массива. PHP сам выделит их столько, сколько потребуется.

Но если вы задумали обрезать массив или вырезать из массива определенный кусок, можете воспользоваться функцией array_splice().


Как выполнить операцию над каждым элементом массива?

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

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

Например,

function print_arr($str)
{
echo $str,"
\n";
$str.=" - done";
}

$arr=array("one","two","three");

array_walk($arr,'print_arr');


распечатает на экране все элементы массива $arr;

Если же вам необходимо произвести преобразование содержимого ячеек и получившиеся данные записать обратно в ячейки, вам придется указать это явно -- дать ссылку на реальный экземпляр ячейки в памяти. Как и в языке C, в PHP это делается добавлением перед переменной амперсанта "&".

Скажем, если бы на надо было не просто распечатать содержимое ячеек, как в приведенном примере, а добавить слово "done" после каждого слова и снова распечатать содержимое массива, то пример выглядел бы так:

function print_arr(&$str)
{
echo $str,"
\n";
$str.=" - done";
}

$arr=array("one","two","three");

array_walk($arr,'print_arr');
echo "

\n";
array_walk($arr,'print_arr');


а результат так:

one two three one - done two - done three - done


Вот такая полезная функция, которой редко пользуются.


Как удалить из массива дубликаты?

Очень просто. Для этого существует функция array_unique, которая вернет вам массив, сократив его до массива, не содержащего повторения.


Как сравнить два массива?

И тут PHP нас заставляет поскучать, ибо функция array_dif все сделает за нас.

Передайте этой функции два массива и она возвратит вам все элементы первого массива, не найденные во втором. Кстати, вторым массивом можно не ограничиваться, функция принимает для сравнения любое количество массивов через запятую.

$result = array_diff ($array1, $array2,$array3,:);



Как объединить массивы?

В PHP массивы объединяет функция array_merge, правда, никто вам не запретит пройтись циклом по одному массиву, прочесть его по ячейкам и дописать данные в конец другого массива.

Честно говоря, одномерные массивы в PHP можно "складывать" обычным плюсом:

$array3=$array1+$array2;


Но! Надо помнить, что сложение массивов игнорирует дубликаты. Если в первом массиве уже есть подобная запись, то она не копируется из второго.

При необходимости объединения всех элементов массива, включая повторяющиеся, можно воспользоваться функцией array_merge_recursive.

* * *

На этом сегодня остановимся, завтра продолжим. Поиграйтесь с массивами, это действительно интересно!

Данный выпуск был подготовлен при подглядывании в книгу Хьюгса Стерлинга "PHP 4.0. Руководство разработчика".

До завтра!

[шаг назад] [печатать] [в начало сайта]



copyright ©2000-2017 Ruslan Kurepin