Работа с массивами в PHP
Функции работы с массивами в PHP можно разделить на следующие категории:
· функции поиска в массиве и извлечение элементов из массива;
· функции итерации(просмотра) элементов массива;
· функции вставки, удаление и замена элементов в массиве;
· функции операций с ключами и значениями элементов в массиве;
· функции сортировки элементов массива.
Поиск в массиве и извлечение элементов из массива обеспечивают следующие функции
bool in_array(mixed needle, array haystack [, bool strict])
mixed array_search(mixed needle,
array haystack [, bool strict])
Эти функции ищут элемент массива haystack со значением needle и возвращают true или значение ключа найденного элемента. Если элемент с заданным значением не задан, обе функции возвращают false. Если значение третьего параметра задано и равно true, выполняется проверка соответствия типа параметра и найденного элемента массива haystack.
Пример 4.6.97. Использование функции in_array():
В следующем фрагменте программы проверяется наличие вводимого с клавиатуры числа в массиве:
|
|
// Объявление массива
$a = array(3, 7, 9, 12, 18, 43, 54, 56);
// Ввод числа для поиска в массиве
echo "\nEnter value: ";
$x = (int)trim(fgets(STDIN));
// Поиск в массиве
$isFound = in_array($x, $a);
// Вывод результата поиска
echo "\nValue $x is ", ($isFound==1)?'':'not ',
"found in \$a";
Выводы этого фрагмента могут иметь следующий вид:
Кроме того, для поиска и извлечения элементов массива по заданным критериям можно использовать следующие функции:
array array_diff(array array1,
array array2 [, array...])
array array_intersect(array array1,
array array2 [, array...])
array array_diff_assoc(array array1,
array array2 [, array...])
array array_intersect_assoc(array array1,
array array2 [, array...])
array array_slice(array array, int offset [, int length])
mixed array_rand(array input [, int num_req])
array array_filter(array input [, callback function])
Функции array_diff() и array_intersect() возвращают массив соответственно элементов, которые есть только в первом из массивов – array1 или элементов, которые есть во всех массивах – array1, array2,....
Функции array_diff_assoc() и array_intersect_assoc() делают то же самое, но с дополнительной проверкой на равенство ключей массивов.
Функция array_slice() вырезает кусок из массива, начиная с offset длиной length (если параметр length не задан, то вырезается кусок до конца массива).
Функция array_rand() возвращает num_req случайно выбранных элементов массива (по умолчанию num_req равно 1).
И, наконец, функция array_filter() фильтрует массив в соответствии с функцией, заданной во втором параметре.
Пример 4.6.98. Использование функций array_diff() и array_intersect():
В следующем фрагменте программы для двух массивов $a1 и $a2 определяется, какие элементы есть только в первом массиве, какие элементы есть только во втором массиве и какие элементы есть в обоих массивах:
// Первый массив
$a1 = array(3, 9, 12, 18, 43, 54);
|
|
// Второй массив
$a2 = array(5, 12, 32, 42, 43);
// Получение и вывод массива элементов,
// которые есть только в первом массиве
$b1_1 = array_diff($a1, $a2);
print "\nOnly in \$a1:";
foreach ($b1_1 as $value)
print " $value";
// Получение и вывод массива элементов,
// которые есть только во втором массиве
$b1_2 = array_diff($a2, $a1);
print "\nOnly in \$a2: ";
foreach ($b1_2 as $value)
print " $value";
// Получение и вывод массива элементов,
// которые есть в обоих массивах
$b2 = array_intersect($a1, $a2);
print "\nIn \$a1 and \$a2: ";
foreach ($b2 as $value)
print " $value";
Вывод фрагмента имеет следующий вид:
Пример 4.6.99. Использование функции array_filter():
В следующем фрагменте программы создается массив $b, в котором содержатся только элементы с целыми значениями массива $a:
// Функция фильтрации целого числа
function integer_value($var)
{
return (is_integer($var) == 1);
}
// Массив чисел
$a = array(3.5, 9, 12.0, 18, 23.44, 54, 73.02);
// Фильтрация массива
$b = array_filter($a, "integer_value");
// Вывод массива
print "\n\$b:";
foreach ($b as $value)
print " $value";
Вывод фрагмента имеет следующий вид: