Разработчику. Сборник рецептов PHP
Задавайте вопросы

Нахождение элементов, удовлетворяющих
определенному критерию

Вернуться назад

Задача

Необходимо установить местоположение элементов в массиве, которые удовлетворяют определенным требованиям.

Решение

Используйте цикл foreach:

$movies = array(...);

foreach ($movies as $movie) {
      if ($movie['box_office_gross'] < 5000000) { $flops[] = $movie; }
}

Или функцию array_filter():

$movies = array(...);

function flops($movie) {
      return ($movie['box_office_gross'] < 5000000) ? 1 : 0;
}

$flops = array_filter($movies, 'flops');

Обсуждение

Цикл foreach прост – вы прокручиваете данные и добавляете в возвращаемый массив элементы, которые удовлетворяют вашему критерию.

Если нужен только первый такой элемент, то используйте break для выхода из цикла:

foreach ($movies as $movie) {
      if ($movie['box_office_gross'] > 200000000) { $blockbuster = $movie;
break; }
}

Можно также выйти прямо из функции:

function blockbuster($movies) {
      foreach ($movies as $movie) {
            if ($movie['box_office_gross'] > 200000000) { return $movie; }
      }
}

Однако при использовании функции array_filter() сначала нужно создать функцию обратного вызова, которая возвращает true для значений, которые нужно сохранить, и false в противном случае. После вызова функции array_filter() нужно, чтобы PHP обработал массив таким же образом, как он обрабатывался в операторе цикла foreach.

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

См. также

Документацию по функции array_filter() на http://www.php.net/array-filter.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ