Трохи функцій для роботи з масивами

Поширте інформацію:

Розглянемо деякі функції для роботи з масивами в PHP, такі як додавання елементів, вилучення їх, об’єднання масивів, транспонування, опрацювання функціями користувача etc. Команди та результати їх виконання скопійовані з вікна інтерактивного інтерпретатора PHP, який запускається командою php -a. Там перший в рядку символ “>” позначає запрошення до введення команди.

array_push

int array_push ( array &$array , mixed $var [, mixed $... ] )

Додає елементи, представлені переданими змінними, в кінець масиву. Функція розглядає масив як стек. Розмір масиву збільшується на число змінних.

Функція дає такий самий ефект, як код

$array[] = $var;

повторений для кожної змінної. Приклад використання:

> $a = array('apple', 'pear', 'plum');
> array_push($a, 'orange', 'lemon');
>var_dump($a);
array(5) {
  [0]=>
  string(5) "apple"
  [1]=>
  string(4) "pear"
  [2]=>
  string(4) "plum"
  [3]=>
  string(6) "orange"
  [4]=>
  string(5) "lemon"
}

array_pop

mixed array_pop ( array &$array )

Розглядає масив як стек. Повертає останній елемент масиву, зменшуючи розмір масиву на 1.

> $fruit = array_pop($a);
> echo $fruit;
lemon
> var_dump($a);
array(4) {
  [0]=>
  string(5) "apple"
  [1]=>
  string(4) "pear"
  [2]=>
  string(4) "plum"
  [3]=>
  string(6) "orange"
}

array_shift

mixed array_shift ( array &$array )

Розглядає масив як чергу. Повертає перший елемент масиву, зменшуючи розмір масиву на 1 і зсуваючи решту елементів донизу. Всі числові ключі перенумеровуються, починаючи з 0. Ключі-рядки не чіпаються.

> $fruit = array_shift($a);
> echo $fruit;
apple
> var_dump($a);
array(3) {
  [0]=>
  string(4) "pear"
  [1]=>
  string(4) "plum"
  [2]=>
  string(6) "orange"
}

array_unshift

int array_unshift ( array &$array , mixed $value1 [, mixed $... ] )

Розглядає масив як чергу. Додає один або кілька елементів до початку масиву, збільшуючи розмір масиву і зсуваючи решту елементів вгору. Порядок елементів початкового масиву не змінюється. Числові ключі перенумеровуються, починаючи з 0, ключі-рядки не чіпаються.

> array_unshift($a, 'apple', 'lemon');
> var_dump($);
array(5) {
  [0]=>
  string(5) "apple"
  [1]=>
  string(5) "lemon"
  [2]=>
  string(4) "pear"
  [3]=>
  string(4) "plum"
  [4]=>
  string(6) "orange"
}

array_merge

array array_merge ( array $array1 [, array $... ] )

Об’єднує два або кілька масивів, послідовно додаючи елементи кожного в кінець попереднього. Функція повертає об’єднаний масив. Початкові масиви не змінюються. Для ключів-рядків, які співпадають, значення елементів попереднього масиву перезаписуються значеннями наступного. Проте, якщо співпадають числові ключі, в результат потрапляють всі елементи — числові ключі перенумеровуються, починаючи з 0.

> $b = array('cucumber', 'tomato');
> $c= array_merge($b, $a);
> var_dump($c);
array(7) {
  [0]=>
  string(8) "cucumber"
  [1]=>
  string(6) "tomato"
  [2]=>
  string(5) "apple"
  [3]=>
  string(5) "lemon"
  [4]=>
  string(4) "pear"
  [5]=>
  string(4) "plum"
  [6]=>
  string(6) "orange"
}

array + array

Іноді потрібно об’єднати 2 масиви з числовими ключами, не перенумеровуючи ключів, тобто поведінка функції array_merge не влаштовує. Бажаний результат досягається операцією “+” над масивами. Якщо числові ключі співпадають, така операція перезапише значення елементів попереднього масиву значеннями наступного.

> $c = $b + $a;
> var_dump($c);
array(5) {
  [0]=>
  string(8) "cucumber"
  [1]=>
  string(6) "tomato"
  [2]=>
  string(4) "pear"
  [3]=>
  string(4) "plum"
  [4]=>
  string(6) "orange"
}

array_flip

array array_flip ( array $array )

Транспонує масив — ключі стають значеннями, а значення — ключами.

> $d = array_flip($c);
> var_dump($);
array(5) {
  ["cucumber"]=>
  int(0)
  ["tomato"]=>
  int(1)
  ["pear"]=>
  int(2)
  ["plum"]=>
  int(3)
  ["orange"]=>
  int(4)
}

array_map

array array_map ( callable $callback , array $array1 [, array $... ] )

Застосовує функцію зворотного виклику, передану в параметрі $callback, до масивів, переданих у решті параметрів. Повертає масив, що містить всі елементи масиву $array1 після застосування функції $callback до кожного з параметрів. Функція може бути стандартною або користувацькою. Число параметрів у функції повинно відповідати числу масивів, переданих функції array_map. Не змінює масивів, переданих у параметрах.

> // Анонімна функція користувача
> $e = array_map( function( $item) {
>   return '3 ' . $item . 's';
> }, $a );
> var_dump($e);
array(5) {
  [0]=>
  string(8) "3 apples"
  [1]=>
  string(8) "3 lemons"
  [2]=>
  string(7) "3 pears"
  [3]=>
  string(7) "3 plums"
  [4]=>
  string(9) "3 oranges"
}
> // Стандартна функція ucfirst
> $e = array_map( 'ucfirst', $a );
> var_dump($e);
array(5) {
  [0]=>
  string(5) "Apple"
  [1]=>
  string(5) "Lemon"
  [2]=>
  string(4) "Pear"
  [3]=>
  string(4) "Plum"
  [4]=>
  string(6) "Orange"
}

array_walk

bool array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] )

Застосовує функцію зворотного виклику, передану в параметрі $callback, до масиву, переданого в параметрі $array.

Функція $callback має приймати мінімум 2 параметри:

  1. значення елемента масиву, має передаватися за посиланням

  2. ключ елемента масиву

  3. необов’язковий третій параметр $userdata функції array_walk.

Повертає функція true в разі успіху і false в разі невдачі.

> array_walk( $a, function( &$item, $key ) {
> echo $key . '. ' . $item . "\n";
> $item = strtoupper( $item );
> });
0.  apple
1.  lemon
2.  pear
3.  plum
4.  orange
> var_dump($a);
array(5) {
  [0]=>
  string(5) "APPLE"
  [1]=>
  string(5) "LEMON"
  [2]=>
  string(4) "PEAR"
  [3]=>
  string(4) "PLUM"
  [4]=>
  string(6) "ORANGE"
}

Яка різниця між функціями array_map та array_walk?

Функція array_walk відрізняється від array_map тим, що:

  • в array_walk масив передається за посиланням, тобто вона може його змінити, тоді як array_map ніколи не змінює масивів, що їй передаються;

  • array_walk оперує також ключами масиву на відміну від array_map;

  • array_map повертає масив, тоді як array_walk повертає true/false;

  • array_map може приймати довільне число масивів, array_walk оперує тільки одним;

  • array_walk може приймати довільний третій параметр, хоча це не має особливого значення з PHP v. 5.3, в якій з’явилися анонімні функції.


array_filter

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

Перебирає елементи масиву $array, пропускаючи кожен через функцію зворотного виклику $callback. Якщо функція повертає true, поточний елемент включається в масив-результат функції array_filter. Ключі зберігаються.

Параметр $flag доданий у PHP 5.6 і визначає, що саме передається у функцію $callback

  • ARRAY_FILTER_USE_KEY – передавати ключі замість значень

  • ARRAY_FILTER_USE_BOTH – передавати і значення, і ключі

Приклад.

> // Відібрати з масиву $a ті рядки, довжина яких не перевищує 4
> $f = array_filter( $a, function( $item ) {
>     return (strlen( $item ) <= 4);
> });
> var_dump($f);
array(2) {
  [2]=>
  string(4) "PEAR"
  [3]=>
  string(4) "PLUM"
}

Інформація з сайту php.net

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.