поиск в двумерном массиве по значению php
PHP поиск многомерных массивов по значению
У меня есть массив, где я хочу найти uid и получить ключ массива.
Примеры
Предположим, у нас есть следующий 2-мерный массив:
Я пытался делать циклы, но я хочу быстрее выполнить код.
Решение
Это будет работать Вы должны назвать это так:
На основе angoru ответ. В более поздних версиях PHP ( >= 5.5.0 ) вы можете использовать однострочник.
Другие решения
Если вы используете (PHP 5> = 5.5.0), вам не нужно писать собственную функцию для этого, просто напишите эту строку, и все готово.
Если вы хотите только один результат:
Для нескольких результатов
Если у вас есть ассоциативный массив, как указано в комментариях, вы можете сделать это с помощью:
Обновление: я делал несколько простых тестов, и форма с несколькими результатами, кажется, самая быстрая, даже быстрее, чем пользовательская функция Jakub!
Я знаю, что на этот вопрос уже был дан ответ, но я использовал его и немного расширил в своем коде, чтобы у вас не было поиска только по uid. Я просто хочу поделиться им с кем-то, кому может понадобиться эта функциональность.
Вот мой пример и, пожалуйста, помните, что это мой первый ответ. Я вынул массив param, потому что мне нужно было искать только один конкретный массив, но вы могли легко добавить его. Я хотел по сути искать больше, чем просто uid.
Кроме того, в моей ситуации может быть несколько ключей для возврата в результате поиска по другим полям, которые могут быть не уникальными.
Позже я закончил писать это, чтобы позволить мне искать другое значение и ассоциативный ключ. Итак, мой первый пример позволяет вам искать значение в любом конкретном ассоциативном ключе и возвращать все совпадения.
Этот второй пример показывает, где в определенном ассоциативном ключе (first_name) найдено значение (‘Taylor’) А ТАКЖЕ другое значение (true) находится в другом ассоциативном ключе (используется) и возвращает все совпадения (ключи, в которых работают люди с именем «Тейлор» И).
Использование функции
Результат
В более поздних версиях PHP (> = 5.5.0) вы можете использовать эту строку:
Видать array_filter будет подходящим решением для этого …
Несмотря на то, что это старый вопрос, на который есть принятый ответ, я подумал, что могу предложить одно изменение в принятом ответе. Итак, во-первых, я согласен, что принятый ответ здесь верен.
Вместо этого вместо предустановленного uid указывается параметр в функции, поэтому теперь вызов приведенного ниже кода означает, что вы можете использовать одну функцию для нескольких типов массивов. Небольшое изменение, но тот, который имеет небольшое значение.
PHP. Поиск данной по двумерном массиве
у меня есть такой массив(как показано на картинке) Мне нужно находить данную по product_id
я пробывал сделать var_dump(array_search(‘55117’,(array)$purchaseWizardTemp->getData()));
но мне возвращает false. будто он не видит его.
Как правильно написать код, чтобы он искал данную в двумерном массиве. Цыкл я пытаюсь избежать. Слишком долго!
3 ответа 3
Скорее всего должно быть так:
Заметка: любые встроенные функции (array_search, array_column, array_map, array_filter и прочие) под капотом используют цикл. По-другому просто невозможно сделать операции над массивом.
Ну вы бы ускорили процесс если бы прочитали Вот это
Плюс у вас «product_id» не совпадает с предложенным.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками php массивы или задайте свой вопрос.
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.9.24.40305
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
array_search
(PHP 4 >= 4.0.5, PHP 5, PHP 7, PHP 8)
array_search — Осуществляет поиск данного значения в массиве и возвращает ключ первого найденного элемента в случае успешного выполнения
Описание
Список параметров
Если needle является строкой, сравнение происходит с учётом регистра.
Возвращаемые значения
Примеры
Пример #1 Пример использования array_search()
Смотрите также
User Contributed Notes 45 notes
in (PHP 5 >= 5.5.0) you don’t have to write your own function to search through a multi dimensional array
$userdb=Array
(
(0) => Array
(
(uid) => ‘100’,
(name) => ‘Sandra Shush’,
(url) => ‘urlof100’
),
(1) => Array
(
(uid) => ‘5465’,
(name) => ‘Stefanie Mcmohn’,
(pic_square) => ‘urlof100’
),
(2) => Array
(
(uid) => ‘40489’,
(name) => ‘Michael’,
(pic_square) => ‘urlof40489’
)
);
simply u can use this
$key = array_search(40489, array_column($userdb, ‘uid’));
About searcing in multi-dimentional arrays; two notes on «xfoxawy at gmail dot com»;
It perfectly searches through multi-dimentional arrays combined with array_column() (min php 5.5.0) but it may not return the values you’d expect.
Secondly, if your array is big, I would recommend you to first assign a new variable so that it wouldn’t call array_column() for each element it searches. For a better performance, you could do;
It’s what the document stated «may also return a non-Boolean value which evaluates to FALSE.»
the recursive function by tony have a small bug. it failes when a key is 0
here is the corrected version of this helpful function:
If you are using the result of array_search in a condition statement, make sure you use the === operator instead of == to test whether or not it found a match. Otherwise, searching through an array with numeric indicies will result in index 0 always getting evaluated as false/null. This nuance cost me a lot of time and sanity, so I hope this helps someone. In case you don’t know what I’m talking about, here’s an example:
for searching case insensitive better this:
About searcing in multi-dimentional arrays;
note on «xfoxawy at gmail dot com» and turabgarip at gmail dot com;
$xx = array_column($array, ‘NAME’, ‘ID’);
will produce an array like :
$xx = [
[ID_val] => NAME_val
[ID_val] => NAME_val
]
$yy = array_search(‘tesxt’, array_column($array, ‘NAME’, ‘ID’));
will output expected ID;
I was going to complain bitterly about array_search() using zero-based indexes, but then I realized I should be using in_array() instead.
The essence is this: if you really want to know the location of an element in an array, then use array_search, else if you only want to know whether that element exists, then use in_array()
Be careful when search for indexes from array_keys() if you have a mixed associative array it will return both strings and integers resulting in comparison errors
/* The above prints this, as you can see we have mixed keys
array(3) <
[0]=>
int(0)
[1]=>
string(3) «car»
[2]=>
int(1)
>
*/
hallo every body This function matches two arrays like
search an array like another or not array_match which can match
hey i have a easy multidimensional array search function
Despite PHP’s amazing assortment of array functions and juggling maneuvers, I found myself needing a way to get the FULL array key mapping to a specific value. This function does that, and returns an array of the appropriate keys to get to said (first) value occurrence.
But again, with the above solution, PHP again falls short on how to dynamically access a specific element’s value within the nested array. For that, I wrote a 2nd function to pull the value that was mapped above.
To expand on previous comments, here are some examples of
where using array_search within an IF statement can go
wrong when you want to use the array key thats returned.
Take the following two arrays you wish to search:
I needed a way to return the value of a single specific key, thus:
Better solution of multidimensional searching.
FYI, remember that strict mode is something that might save you hours.
one thing to be very aware of is that array_search() will fail if the needle is a string and the array itself contains values that are mixture of numbers and strings. (or even a string that looks like a number)
The problem is that unless you specify «strict» the match is done using == and in that case any string will match a numeric value of zero which is not what you want.
also, php can lookup an index pretty darn fast. for many scenarios, it is practical to maintain multiple arrays, one in which the index of the array is the search key and the normal array that contains the data.
//very fast lookup, this beats any other kind of search
I had an array of arrays and needed to find the key of an element by comparing actual reference.
Beware that even with strict equality (===) php will equate arrays via their elements recursively, not by a simple internal pointer check as with class objects. The === can be slow for massive arrays and also crash if they contain circular references.
This function performs reference sniffing in order to return the key for an element that is exactly a reference of needle.
A simple recursive array_search function :
A variation of previous searches that returns an array of keys that match the given value:
I needed a function, that returns a value by specifying a keymap to the searched value in a multidimensional array and came up with this.
My function get_key_in_array() needed some improvement:
An implementation of a search function that uses a callback, to allow searching for objects of arbitrary complexity:
For instance, if you have an array of objects with an id property, you could search for the object with a specific id like this:
For a more complex example, this function takes an array of key/value pairs and returns the key for the first item in the array that has all those properties with the same values.
The final step is a function that returns the item, rather than its key, or null if no match found:
PHP поиск многомерных массивов по значению
У меня есть массив, где я хочу искать uid и получить ключ от массива.
Примеры
Предположим, что мы имеем следующий двумерный массив:
Я пробовал создавать циклы, но мне нужен более быстрый исполняемый код.
18 ответов
Это сработает. Вы должны называть это следующим образом:
На основе ответа angoru. В более поздних версиях PHP ( >= 5.5.0 ) вы можете использовать один-лайнер.
Если вы используете (PHP 5 >= 5.5.0), вам не нужно писать свою собственную функцию, чтобы сделать это, просто напишите эту строку и все сделайте.
Если вы хотите получить только один результат:
Для нескольких результатов
Если у вас есть ассоциативный массив, как указано в комментариях, вы можете сделать это с помощью
Если вы используете PHP angoru 02 июль 2014, в 10:53
Создание Jakub отличный ответ, вот более обобщенный поиск, который позволит указать ключ (а не только для uid):
Я знаю, что на это уже был дан ответ, но я использовал это и расширил его еще немного в своем коде, чтобы у вас не было поиска только с помощью uid. Я просто хочу поделиться им для всех, кому может понадобиться эта функциональность.
Вот мой пример и, пожалуйста, обратите внимание, что это мой первый ответ. Я достал массив param, потому что мне нужно было искать только один конкретный массив, но вы могли бы легко добавить его. Я хотел по существу искать больше, чем просто uid.
Кроме того, в моей ситуации может быть несколько ключей для возврата в результате поиска другими полями, которые могут быть не уникальными.
Позже я закончил писать это, чтобы разрешить мне искать другое значение и ассоциативный ключ. Поэтому мой первый пример позволяет вам искать значение в любом конкретном ассоциативном ключе и возвращать все совпадения.
Этот второй пример показывает вам, где значение ( «Тейлор» ) найдено в определенном ассоциативном ключе (first_name) И другое значение (true) найдено в другом ассоциативном ключе (используется) и возвращает все совпадения (Ключи, в которых используются люди с именем «Тейлор» И).
Лабиринты программирования или PHP поиск по массивам
Дата публикации: 2016-12-27
От автора: осень, зима, вот и потянуло меня на лирику да романтику. Вы думаете, программирование совсем не романтическое ремесло? Ошибаетесь! Взять хотя бы массивы. Их ветвление очень похожи на повороты лабиринтов, в которых незнающий человек может застрять навеки! Сегодня мы узнаем, как происходит в PHP поиск по массивам.
Массивы бывают разные…
Простые – состоят из пары «ключ-значение», где в качестве ключа выступает значение индекса. Любой нумерованный список можно рассматривать как простой массив, в котором номер строки является индексом, а его содержание — значением.
Также массивы могут быть:
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Одномерными – используется один индекс.
Многомерными – используется два и более индексов.
Получается, что массивы являются одной из самых простых разновидностей структурированного представления данных. Вся информация в них упорядочена с помощью ключей, а информация записана в значения элементов. Но как происходит поиск ключа в массиве PHP?
Спасибо функциям!
Большая и огромная человеческая благодарность всем функциям PHP, которые облегчают работу с массивами! Если бы их не было (функций), то сортировка данных превратилась бы в настоящую «пытку» головного мозга!
У нас есть массив, состоящий из сотрудников. Нам нужно «поймать» Вольдемарыча. Для этого следует осуществить поиск элемента в массиве PHP по значению. Вот как будет выглядеть реализация данной задачи без применения специальных функций:
Получается, чтобы поймать Вольдемарыча, нам потребовалось запустить 10 строк кода. Теперь попробуем сделать то же самое с помощью функции array_search(). В качестве аргументов она принимает значение элемента и сам массив, а возвращает индекс (ключ) искомого. В нашем случае она возвратит ключ элемента с содержимым «Вольдемарыч».
Вот результат PHP поиска в массиве по значению:
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Но почему функция вернула единицу, если Вольдемарыч у нас проходит «по списку» под номером два? Забыл сказать, что индексация массивов начинается не с 1, а с 0. Значит все верно.
«Многомерим» наш массив
В двух предыдущих примерах мы использовали одномерный массив, в котором для идентификации используется только один индекс. Но при работе со структурированными данными все элементы коллекций, списков, стеков и других «разновидностей» чаще всего взаимосвязаны между собой по нескольким «признакам».
Чтобы было понятнее, я предлагаю вспомнить о типах взаимосвязи между таблицами в одной базе данных. Например, существует таблица, в которую заносятся ФИО рабочих предприятия. При этом некоторые ее столбцы взаимосвязаны с другой таблицей, где фиксируется посещаемость (рабочий табель). А с этой таблицей может быть связана другая, куда (на основе табеля) вычисляется и заносятся сроки следующего (ежегодного) отпуска… То есть один элемент идентифицируется не по одному ключу, а по нескольким.
Получается, что PHP поиск в многомерном массиве осуществляется по двум и более индексам. Чтобы продемонстрировать это, нам придется немного подправить существующий вариант «структуры».