У меня есть массив, где я хочу найти uid
и получить ключ массива.
Примеры
Предположим, у нас есть следующий 2-мерный массив:
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
Вызов функции search_by_uid(100)
(uid первого пользователя) должен вернуться 0
.
Вызов функции search_by_uid(40489)
должен вернуться 2
.
Я пытался делать циклы, но я хочу быстрее выполнить код.
php
arrays
multidimensional-array
Rachit
источник
источник
array_column
однострочными ответами. Я изменил их все, чтобы они возвращали фактический обнаруженный массив, а не только ключ, потому что обычно это мой вариант использования. Метод функции набрал 0,361, столбец поиска 0,184 и ключ-столбец 0,189, средняя микро-задержка более 1000 запусков для каждого метода.Ответы:
Это будет работать Вы должны назвать это так:
Важно знать, что если вы используете
===
оператор, сравниваемые типы должны быть точно такими же, в этом примере вы должны искатьstring
или просто использовать==
вместо этого===
.На основании ангорского ответа. В более поздних версиях PHP (
>= 5.5.0
) вы можете использовать однострочник.Вот документация: http://php.net/manual/en/function.array-column.php .
источник
array_column($userdb, 'uid')
наarray_map(function($v){return $v['uid'];},$userdb)
array_search
, не так ли?foreach
цикл) будет работать быстрее, потому что оно останавливается, как только найдено совпадение. Более новое решение должно выполнить итерацию всего массива один раз для извлеченияarray_column
, а затем выполнить цикл по нему второй раз, чтобы выполнить поиск (пока он не найдет совпадение). Более новое решение легче читать, оно более лаконично, но OP специально поднял вопрос производительностиЕсли вы используете (PHP 5> = 5.5.0), вам не нужно писать собственную функцию для этого, просто напишите эту строку, и все готово.
Если вы хотите только один результат:
Для нескольких результатов
Если у вас есть ассоциативный массив, как указано в комментариях, вы можете сделать это с помощью:
Если вы используете PHP <5.5.0, вы можете использовать этот backport , спасибо ramsey!
Обновление: я делал несколько простых тестов, и форма с несколькими результатами, кажется, самая быстрая, даже быстрее, чем пользовательская функция Jakub!
источник
array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
В более поздних версиях PHP (> = 5.5.0) вы можете использовать эту строку:
источник
Основываясь на превосходном ответе Якуба, приведем более обобщенный поиск, который позволит указать ключ (не только для uid):
Использование:
$results = searcharray('searchvalue', searchkey, $array);
источник
Я знаю, что на этот вопрос уже был дан ответ, но я использовал его и немного расширил в своем коде, чтобы у вас не было поиска только по uid. Я просто хочу поделиться им с кем-то еще, кому может понадобиться эта функциональность.
Вот мой пример и, пожалуйста, помните, что это мой первый ответ. Я вынул массив param, потому что мне нужно было искать только один конкретный массив, но вы могли легко добавить его. Я хотел по сути искать больше, чем просто uid.
Кроме того, в моей ситуации может быть несколько ключей для возврата в результате поиска по другим полям, которые могут быть не уникальными.
Позже я закончил писать это, чтобы позволить мне искать другое значение и ассоциативный ключ. Итак, мой первый пример позволяет вам искать значение в любом конкретном ассоциативном ключе и возвращать все совпадения.
Второй пример показывает вам , где значение ( «Taylor») находится в определенном ассоциативном ключе (first_name) И другое значение (истина) , находятся в другом ассоциативном ключе (используется), и возвращают все матчи (ключи , где люди с именем «Тейлор» И работают).
Использование функции
результат
источник
Похоже, array_filter будет подходящим решением для этого ...
Код PHP
источник
syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
Я модифицировал один из примеров ниже описания функции array_search . Функция
searchItemsByKey
возвращает все значения по $ key из многомерного массива (N уровней). Возможно, это было бы полезно для кого-то. Пример:Код функции:
источник
Вот один лайнер для того же,
источник
Несмотря на то, что это старый вопрос, и на него есть принятый ответ, я подумал, что я бы предложил одно изменение в принятом ответе. Итак, во-первых, я согласен, что принятый ответ здесь правильный.
Вместо этого вместо предустановленного uid указывается параметр в функции, поэтому теперь вызов приведенного ниже кода означает, что вы можете использовать одну функцию для нескольких типов массивов. Небольшое изменение, но тот, который имеет небольшое значение.
Пример PHP Fiddle
источник
null
а затем в коде, вы сравниваете егоfalse
.Я хочу проверить, что в следующем массиве
$arr
есть ли 'abc' существует в под-массивах или нетТогда я могу использовать это
Я думаю, что это самый простой способ определить
источник
Мне пришлось использовать функцию un, которая находит все элементы в массиве. Поэтому я изменил функцию, которую сделал Якуб Трунечек, следующим образом:
источник
источник
Вы можете использовать эту функцию; https://github.com/serhatozles/ArrayAdvancedSearch
источник
источник
Попробуй это
источник
Просто поделись, может может и понравится.
источник
Попробуйте это также
источник
С помощью приведенного выше кода можно найти любые (частично совпадающие) данные из любого столбца в двумерном массиве, чтобы при необходимости можно было найти идентификатор пользователя.
источник
Расширяя созданную функцию @mayhem, этот пример будет более «нечетким» поиском в случае, если вы просто хотите сопоставить часть ( большую часть ) строки поиска:
Например, значение в массиве - Добро пожаловать в Нью-Йорк! и вы хотели первый экземпляр просто "Нью-Йорк!"
источник
источник
Если вопрос то есть
Ans:
источник
мое решение:
источник