Фильтрация с помощью функций массива [part 3]

Следуя примерам в этом руководстве, вы узнаете, как фильтровать элементы с помощью функций массива.

/img/blog/filtering-with-array-functions.jpg

Это третья глава серии, в которой мы разберем целый раздел, посвященный функциям массивов.

Эта часть посвящена фильтрация элементов из массива.

Есть десятки и десятки случаев, когда нашим скриптам нужны только определенные элементы, присутствующие в массиве, а другие элементы, кроме того, что они бесполезны для нашей цели, сделать наши приложения медленнее, а наш код более запутанным.

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

О сериале

Этот пост в блоге из серии » Выставлен массив PHP«.

Если вы еще не читали другие статьи

взгляните на них:
Открытый массив PHP (часть первая)
Создание массивов и управление ими

Содержание
массив_фильтр()
array_reduce()
array_intersec()
array_intersect_assoc()
array_diff_assoc()
Максимум()
мин()
количество() и размер()
Вывод

массив_фильтр()

Как уже упоминалось, это раздел серии, посвященный фильтрации элементов в массиве, поэтому давайте начнем с классики:

массив_фильтр()

Для этой функции требуется обязательный параметр, который представляет собой массив, к которому мы хотим применить фильтр, и два других ненужных параметра.

Первый предпочтительнее вставлять в любом случае, он состоит из callback-функции, второй из необязательных параметров состоит из флагов, определяющих использование ключей или пары ключ-значение.

Перейдем к делу, как массив_фильтр() Работа?

Эта функция циклически перебирает все элементы массива в качестве первого параметра и передает их функции массива, используемой в качестве обратного вызова, один за другим.

Если после оценки элемента функция возвращает значение true, значение возвращается внутри массива, если оно не отфильтровано.

Обратите внимание, что ключи массива сохраняются.

Если вы уже видели некоторые эпизоды этого сериала, вы уже знаете, что я использую простые ссылки для понимания.

В этом случае вместо этого я беззастенчиво украду пример из руководства PHP.net,

Причина проста, я считаю, что предложенный пример довольно сложен для новичка, и я пользуюсь случаем, чтобы объяснить его простыми словами.

Вот предлагаемый пример:

function odd($var) 
{ 
    
    return($var & 1); 
} 
function even($var) 
{ 
    
    return(!($var & 1)); 
} 

$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12); 

echo "Odd :\n"; 
print_r(array_filter($array1, "odd")); 
echo "Even:\n"; 
print_r(array_filter($array2, "even")); 
Odd : 
Array ( [a] => 1 [c] => 3 [e] => 5 ) 
Even: 
Array ( [0] => 6 [2] => 8 [4] => 10 [6] => 12 )

В примере выше функция массив_фильтр() принимает массив в качестве параметра и вызывает функцию (второй параметр), функция, в свою очередь, оценивает элемент, переданный как атрибут, и возвращает логическое значение.

Теперь, что это?

возврат ($ вар & 1);

Это операция AND в BITWISE.

У всех четных чисел младший бит равен 0, тогда как у всех нечетных чисел младший значащий бит установлен на 1.

Так что это просто «И» два числа вместе.

3, например, он представлен как 11 в двоичном формате. 11 & 01 = 01 => правда, так что это нечетно.

2 вместо этого он представлен как 10 в двоичном формате. 10 & 01 = 00 => false, значит, четно.

Я уже описывал операторы BITWISE в статье по основам PHP. Это обязательно повысит ваши навыки.

нажмите здесь, чтобы узнать больше о Bitwise

array_reduce()

В Интернете много путаницы и неверной информации об этой функции массива.

Что делает его одной из наименее используемых функций, которые я когда-либо видел в своей карьере.

array_reduce() нужна функция обратного вызова, которая делает ее более сложной, чем обычно, более сложная часть заключается в том, что для работы обратного вызова требуются два параметра.

Давайте взглянем,

Что делает эта функция, так это итеративно уменьшить массив до одного значения, используя функцию обратного вызова.

Что это значит?

Проще говоря, эта функция принимает массив и, обработав элементы по callback-у, возвращает из него одну переменную.

Как вы понимаете, эта функция принимает как минимум 2 параметра: первый — массив для обработки, второй — обратный вызов функции, который выполняет работу.

Третий параметр касается начального значения, с которого мы хотим начать в нашем обратном вызове, однако его использование не обязательно.

function addComma($e1,$e2) 
{ 
    return $e1 . ", " . $e2; 
} 

$dwarfs = array('Doc', 'Grumpy', 'Happy', 'Sleepy', 'Dopey', 'Bashful', 'Sneezy');

print_r(array_reduce($dwarfs,"addComma")); 

print_r(array_reduce($dwarfs,"addComma", "Dwarfs")); 

Если вы хотите узнать больше об этой функции, вот статья Гордона Форсайта: Достижение того, что углубляется в массивы с помощью array_reduce в PHP

array_intersec()

Мы перешли от довольно сложной для понимания функции к очень простой.

array_intersec() на самом деле очень проста, будучи одной из первых доступных функций с тех пор, как она была впервые опубликована в PHP 4.0.1.

Его задачей является фильтрация элементов массива, указанного в качестве первого обязательного параметра и обычно называемого главным массивом, по одному или нескольким выбранным массивам в качестве последующих параметров.

Если элемент присутствует в основном массиве, а также присутствует в любом другом, то он будет возвращен в результирующий массив.

$dwarfs1 = array('Doc', 'Grumpy', 'Happy', 'Sleepy', 'Dopey', 'Bashful', 'Sneezy'); 
$dwarfs2 = array('Doc', 'Dopey');
$dwarfs3 = array('Doc', 'Grumpy', 'Dopey', 'Bashful', 'Sneezy'); 
$result=array_intersect($dwarfs1, $dwarfs2, $dwarfs3);
print_r($result); 
Array ( [0] => 'Doc', [1] => 'Dopey' )

Обратите внимание, что для того, чтобы элементы считались равными, значение сравнения === между ними должно быть истинным.

array_intersect_assoc()

Эта функция появилась вскоре после предыдущей и, как и предыдущая, унаследовала очень простой для понимания синтаксис.

array_intersect_assoc() принимает минимум 2 массива в качестве параметров, фильтрует первый массив, называемый master, с остальными.

если и ключи, и значения идентичны во всех предоставленных массивах, то они будут добавлены в массив, возвращаемый функцией.

$dwarfs = array( 
    'first' => 'Grumpy', 
    'second' => 'Happy', 
    'third' => 'Sleepy', 
    'fourth' => 'Dopey', 
    'fifth' => 'Bashful', 
    'sixth' => 'Sneezy', 
    'seventh' => 'Doc' 
); 
$dwarfs2 = array( 
    'first' => 'Grumpy', 
    0 => 'Happy', 
    1 => 'Dopey', 
    2 => 'Bashful', 
    'sixth' => 'Sneezy', 
); 
$dwarfs3 = array( 
    'first' => 'Grumpy', 
    0 => 'Dopey', 
    'sixth' => 'Sneezy', 
); 
$result= array_intersect_assoc($dwarfs1, $dwarfs2, $dwarfs3);
print_r($result); 
Array ( ['first'] => 'Grumpy', ['sixth'] => 'Sneezy')

Как видите, фильтрация вернула только 2 элемента из всех массивов.

Во всех трех массивах есть пара [‘first’] => «Сварливый» и [‘sixth’] => ‘Чихать’.

Вы также можете заметить, что во всех массивах есть значение ‘Dopey’, но оно имеет разные ключи, поэтому оно не вычисляется.

array_diff_assoc()

Еще один родственник функций, описанных выше, и еще одна функция, входящая в категорию «фильтры массива».

array_uintersect() работает очень похоже на array_intersect() но отличается тем, что у него есть функция обратного вызова, указанная как последний параметр, которая сравнивает предоставленные элементы массивов.

function comparison($a,$b) 
{ 
    return $a ⇔ $b; 
} 

$dwarfs1 = array('Doc', 'Grumpy', 'Sneezy'); 
$dwarfs2 = array('Doc', 'Sleepy', 'Dopey', 'Bashful', 'Sneezy'); 

print_r(array_uintersect($dwarfs1, $dwarfs2, "comparison"));
Array ( [0] => 'Doc', [1] => 'Sneezy')

Обратите внимание, что начиная с PHP 5 язык предоставляет функцию array_intersect_assoc()работает аналогично array_intersect() но это сравнивает ключи и значения.

Семейство array_intersect и array_diff довольно большое, всего 10 элементов, все они очень похожи как по методам работы, так и по синтаксису, поэтому вот список и несколько небольших советов, если вы решите погрузиться в них:

  • массив_пересечение,
  • array_intersect_ assoc,
  • ключ массива_ пересечения_,
  • array_intersect_uasoc,
  • array_intersect_ ukey,
  • array_ diff
  • array_ diff_ assoc,
  • array_ diff_ ключ,
  • array_ diff_ uassoc,
  • array_ diff_ ukey,

Легенда:
Пересекать : вычисляет пересечения;
Диф : вычисляет разницу;
ассистент : оценивает как ключи, так и значения;
Уассок : функция обратного вызова используется для сравнения индексов;
Укей : оценивает ключи;

Максимум()

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

PHP 4 предоставил вам своих собственных программистов, которые значительно облегчают этот поиск.

в Максимум() функция принимает в качестве параметра массив или две или более переменных, которые могут быть разных типов и сравните каждый из них, возвращая максимальное значение.

Вы также можете оценить различные типы переменных, и они будут оцениваться с использованием стандартных правил сравнения.

$maxNumber = max(2, 3, 1, 6, 7); 

$maxArrayElement = max([2, 4, 5]);


$maxDwarfs = ['Doc', 'Grumpy', 'Happy', 'Sleepy', 'Dopey', 'Bashful', 'Sneezy']; 



$maxIntString = max(1, 'Doc'); 



$maxArray = max([1, 2, 3], [1, 2, 4]); 



$maxIntBool = max(0, TRUE); 

мин()

в мин() Функция находит наименьшее значение среди набора значений.

в принципе, если перевернуть все, что написано в части, касающейся Максимум() функция, вы получите результат мин().

количество() и размер()

Если вы работаете с элементом, который является массивом или объектом, реализующим встроенный интерфейс PHP Countable вы можете использовать массив считать() функция.

считать() принимает в качестве параметра 2 значения, первое и переменную для подсчета, второй параметр, который не является обязательным, состоит из флага, определяющего метод подсчета.

Флаг может иметь два значения: COUNT_NORMAL и COUNT_RECURSIVE, второе полезно в случае

ассоциативные массивы.

$dwarfs = ['Doc', 'Grumpy', 'Happy', 'Sleepy', 'Dopey', 'Bashful', 'Sneezy']; 
var_dump(count($dwarfs)); 

$disney = [
    "dwarfs" => ['Doc', 'Grumpy', 'Happy', 'Sleepy', 'Dopey', 'Bashful', 'Sneezy'], 
    "originals" => ["Mickey Mouse","Pete", "Goofy", "Minnie Mouse", "Pluto"] 
]; 


var_dump(count($disney)); 


var_dump(count($disney)); 

Еще немного о функции count в официальном руководстве

Вывод

Как вы видели, набор функций массива, PHP предоставил нам и продолжает предоставлять невероятно широкий ,

В этом разделе серии мы видели чрезвычайно простые функции, например, пару мин() а также Максимум()и другие, которые углубляются в детали, такие как array_intersect_uassoc().

Хорошая новость заключается в том, что нет ни работы, ни открытой вакансии, требующей знания всех этих функций наизусть ,

Еще одна хорошая новость заключается в том, что теперь, когда вы их понимаете, вы можете отметить этот пост в своем браузере и вернуться, когда захотите.

После обсуждения фильтров в следующей главе этой серии вы увидите еще одну часть, которая составляет основу функций PHP.

Как заказать товары внутри.

Если вы сегодня узнали что-то новое и еще этого не сделали, подпишитесь на рассылку, чтобы получать уведомления о выходе следующей главы.

***

Если вам нравится этот контент и следующий набор примеров функций массивов, следите за обновлениями и подпишитесь на информационный бюллетень, чтобы получать уведомления.

Если вы хотите узнать больше о функциях массивов PHP, взгляните на уже опубликованные учебные пособия, которые являются частью этой серии, нажав на ссылки ниже.

Открытый массив PHP (часть первая)
Создание массивов и управление ими

***

Научитесь программировать, приобретите новый навык, устройтесь на новую работу

Какой бы ни была ваша цель — Treehouse поможет вам достичь ее

В настоящее время они делают бесплатное 4-месячное предложение (стоимостью 100 долларов).

Посмотри на это!.

(Партнерские ссылки)

получить еженедельный обзор книги

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *