DevGang
Авторизоваться

Работаем с массивами в 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 не работает рекурсивно, т. е. он не работает с вложенными массивами. 

#PHP
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу