Работаем с массивами в PHP7
Массив представляет собой составной тип данных, который представляет собой связь между ключами и значениями. В PHP это один из самых популярных и мощных типов данных. Существует около 80 функций для работы с массивами. Эта особенность страдает от той же причудливости, приписываемой языку в целом.
- несовместимое соглашение об именах - asort - это не тот же шаблон, что и array_walk. Более интуитивное имя - array_sort.
- непоследовательный порядок аргументов - array_filter($array, $callback) и array_map($callback, $array). strpos($haystack, $needle) и array_search($needle, $haytsack).
Тем не менее, массивы никуда не денутся, и их сила не уменьшается. В последних версиях языка были усовершенствованы функции. Давайте кратко рассмотрим две из них.
Константы в PHP
Начиная с PHP 5.3 существует два способа определения констант:
- с помощью ключевого слова: const
- и с использование функции: define().
Например, const TOTAL_ITEMS = 5; и define('FUNNY_MAN', 'Mr Bean');
Основное отличие заключается в том, что const принимает только статическое скалярное значение (число или строку, а также другие константы, такие как TRUE, FALSE, NULL, __FILE__ и т.д.), в то время как в define вы можете передать любое выражение, например. define('DURATION', 24 * 60 * 60);
Затем в PHP 5.6 добавили возможность для const также принимать выражения: const DURATION = 24 * 60 * 60;. Однако в PHP7 возможности const расширили:
define('PREMIER_LEAGUE_TEAMS', [ 'Arsenal', 'Chelsea', 'Liverpool', 'Manchester City', 'Manchester United', 'Tottenham Hotspur', ]); const PREMIER_LEAGUE_TEAMS = [ 'Arsenal', 'Chelsea', 'Liverpool', 'Manchester City', 'Manchester United', 'Tottenham Hotspur', ];
Функции в PHP7 для работы с массивами
Функция array_column, введенная в PHP 5.5, является еще одним примером прогрессивного улучшения функций в PHP 7. Например, учитывая приведенный ниже массив:
$students = [ [ 'student_id' => 'DEN20170017', 'firstname' => 'Ngozi', 'lastname' => 'Chukwuemeka', 'score' => 78, ], [ 'student_id' => 'DEN20170112', 'firstname' => 'David', 'lastname' => 'Babajide', 'score' => 82, ], [ 'student_id' => 'DEN20170002', 'firstname' => 'Usman', 'lastname' => 'Lawal', 'score' => 76, ], [ 'student_id' => 'DEN20170088', 'firstname' => 'Ade', 'lastname' => 'Ogunbameru', 'score' => 49, ], ];
До версии PHP 5.5, чтобы получить массив всех столбцов, нужно сделать что-то вроде:
$scores = []; foreach ($students as $student) { $scores[] = $student['score']; }
В PHP 5.5:
$scores = array_column($students, 'score'); // [0 => 78, 1 => 82, 2 => 76, 3 => 49]
И для индексации столбца другим столбцом, например:
$scores = []; foreach ($students as $student) { $scores[$student['student_id']] = $student['score']; }
Новая функция также делает это:
$scores = array_column($students, 'score', 'student_id'); // ['DEN20170017' => 78, 'DEN20170112' => 82, 'DEN20170002' => 76, 'DEN20170088' => 49]
Все лучше и лучше. А что относительно PHP7? Теперь array_column принимает массив объектов, из которых вытягивается массив общедоступных свойств:
$student1 = new stdClass(); $student1->student_id = 'DEN20170017'; $student1->firstname = 'Ngozi'; $student1->lastname = 'Chukwuemeka'; $student1->score = 78; $student2 = new stdClass(); $student2->student_id = 'DEN20170112'; $student2->firstname = 'David'; $student2->lastname = 'Babajide'; $student2->score = 82; $student3 = new stdClass(); $student3->student_id = 'DEN20170002'; $student3->firstname = 'Usman'; $student3->lastname = 'Lawal'; $student3->score = 76; $student4 = new stdClass(); $student4->student_id = 'DEN20170088'; $student4->firstname = 'Ade'; $student4->lastname = 'Ogunbameru'; $student4->score = 49; $students = [$student1, $student2, $student3, $student4];
Мы получаем те же результаты, что и раньше, с
$scores = array_column($students, 'score');
И
$scores = array_column($students, 'score', 'student_id');
Обратите внимание, что array_column не работает рекурсивно, т. е. он не работает с вложенными массивами.