Лабиринты программирования или PHP поиск по массивам

PHP поиск по массивам

От автора: осень, зима, вот и потянуло меня на лирику да романтику. Вы думаете, программирование совсем не романтическое ремесло? Ошибаетесь! Взять хотя бы массивы. Их ветвление очень похожи на повороты лабиринтов, в которых незнающий человек может застрять навеки! Сегодня мы узнаем, как происходит в PHP поиск по массивам.

Массивы бывают разные…

Надеюсь, с массивами вы немного знакомы. Хотя не факт, поэтому пару «зарисовок» на тему :) . Массивы бывают:

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

Ассоциативные – в них ключами могут выступать не только числа, но и строки. Чаще всего ключ и значение логически (ассоциативно) связаны между собой. Пример такого массива я пока не придумал :) .

Также массивы могут быть:

Одномерными – используется один индекс.

Многомерными – используется два и более индексов.

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

Спасибо функциям!

Большая и огромная человеческая благодарность всем функциям PHP, которые облегчают работу с массивами! Если бы их не было (функций), то сортировка данных превратилась бы в настоящую «пытку» головного мозга!

Ну, может я и приврал чуток :) . Но объем кода без применения этих функций точно бы возрос в разы. Опять не верите? Тогда давайте докажу на примере.

У нас есть массив, состоящий из сотрудников. Нам нужно «поймать» Вольдемарыча. Для этого следует осуществить поиск элемента в массиве PHP по значению. Вот как будет выглядеть реализация данной задачи без применения специальных функций:

<?php
$fio = array("Петрович", "Вольдемарыч", "Сансаныч");
$n = count($fio);
$a=1;
for($t = 0; $t < $n; $t++){
	echo $fio[$t]. "<br>";
	if($t==$a){
	echo "<b>Попался, Вольдемарыч </b>"."<br>";
	}
}
?>

PHP поиск по массивам

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

<?php
$fio = array("Петрович", "Вольдемарыч", "Сансаныч");
$result=array_search("Вольдемарыч",$fio);
echo $result;
?>

Вот результат PHP поиска в массиве по значению:

PHP поиск по массивам

Но почему функция вернула единицу, если Вольдемарыч у нас проходит «по списку» под номером два? Забыл сказать, что индексация массивов начинается не с 1, а с 0. Значит все верно.

«Многомерим» наш массив

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

Чтобы было понятнее, я предлагаю вспомнить о типах взаимосвязи между таблицами в одной базе данных. Например, существует таблица, в которую заносятся ФИО рабочих предприятия. При этом некоторые ее столбцы взаимосвязаны с другой таблицей, где фиксируется посещаемость (рабочий табель). А с этой таблицей может быть связана другая, куда (на основе табеля) вычисляется и заносятся сроки следующего (ежегодного) отпуска… То есть один элемент идентифицируется не по одному ключу, а по нескольким.

Получается, что PHP поиск в многомерном массиве осуществляется по двум и более индексам. Чтобы продемонстрировать это, нам придется немного подправить существующий вариант «структуры».

<?php
$fio[1] = array("name"=>"Петрович", "vozrast"=>"48 лет", "profess"=>"слесарь");
$fio[2] = array("name"=>"Вольдемарыч", "vozrast"=>"29 лет", "profess"=>"сантехник");
$fio[3] = array("name"=>"Сансаныч", "vozrast"=>"38 лет", "profess"=>"токарь");
?>

Теперь посмотрим, как происходит PHP поиск ключа в многомерном массиве. Для этого нам пригодится предыдущая функция:

<?php
$fio[1] = array("name"=>"Петрович", "vozrast"=>"48 лет", "profess"=>"слесарь");
$fio[2] = array("name"=>"Вольдемарыч", "vozrast"=>"29 лет", "profess"=>"сантехник");
$fio[3] = array("name"=>"Сансаныч", "vozrast"=>"38 лет", "profess"=>"токарь");
$result=array_search(array("name"=>"Вольдемарыч", "vozrast"=>"29 лет", "profess"=>"сантехник"),$fio);
echo $result;
?>

Но иногда при поиске значения в многомерном массиве PHP нужно узнать, есть такой элемента или нет. Для этого понадобится другая функция — in_array(). Она также в качестве параметров принимает значение элемента и массив, но возвращает значение типа bool.

<?php
$fio[1] = array("name"=>"Петрович", "vozrast"=>"48 лет", "profess"=>"слесарь");
$fio[2] = array("name"=>"Вольдемарыч", "vozrast"=>"29 лет", "profess"=>"сантехник");
$fio[3] = array("name"=>"Сансаныч", "vozrast"=>"38 лет", "profess"=>"токарь");
if (in_array(array("name"=>"Вольдемарыч", "vozrast"=>"29 лет", "profess"=>"сантехник"),$fio))
{
echo "Вольдемарыч нашелся!";
}
else{
echo "Вольдемарыч сбежал!";
}
?>

PHP поиск по массивам

Двое из ларца…

Поиск совпадений в массиве PHP – тоже вещь нужная! Но для ее реализации придется создавать собственное решение, а не надеяться на возможности языка. С многомерностью на сегодня покончено. Для демонстрации следующего примера возвращаемся к первоначальному варианту массива.

<?php
$fio = array("Петрович", "Вольдемарыч", "Сансаныч", "Вольдемарыч");
$n = count($fio);
for($t = 0; $t < $n; $t++){
	echo $fio[$t]. "<br>";
	if($fio[$t]==$fio[1]){
	echo "<b>Совпадение в $t элементе</b>"."<br>";
	}	
}
?>

PHP поиск по массивам

С помощью этого примера мы провели поиск количества одинаковых значений в массиве PHP. Для этого в цикле if мы сравнивали значения всех элементов с заданным. Оказалось, что Вольдемарыч встречается в массиве два раза. Сегодня нам снова удалось не заплутать в дебрях PHP и узнать много нового. Например, кто такой Вольдемарыч :) .

Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Курс по программированию на языке PHP

Изучите PHP с нуля до результата!

Смотреть курс

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

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

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

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree