Я использую, in_array()
чтобы проверить, существует ли значение в массиве, как показано ниже,
$a = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $a))
{
echo "Got Irix";
}
//print_r($a);
но как насчет многомерного массива (ниже) - как я могу проверить это значение, существует ли оно в многомерном массиве?
$b = array(array("Mac", "NT"), array("Irix", "Linux"));
print_r($b);
или я не должен использовать, in_array()
когда дело доходит до многомерного массива?
php
arrays
multidimensional-array
laukok
источник
источник
var_dump(array_sum(array_map(function ($tmp) {return in_array('NT',$tmp);}, $multiarray)) > 0);
$multiarray = array( "Hello", array("Mac", "NT"), array("Irix", "Linux"));
$tmp
- это массив сis_array()
функцией. Если не массив - переходите по другому сценарию.Ответы:
in_array()
не работает на многомерных массивах. Вы можете написать рекурсивную функцию, которая сделает это за вас:Использование:
источник
_r
, аналогичнойprint_r()
, например). Он опускается во все вложенные массивы для поиска значения, пока не будет найдено больше массивов. Таким образом, вы можете искать в массивах произвольной сложности, а не только на двух уровнях.Если вы знаете, по какому столбцу вести поиск, вы можете использовать array_search () и array_column ():
Эта идея находится в разделе комментариев для array_search () в руководстве по PHP;
источник
array_column
Это тоже будет работать.
Использование:
источник
foreach
петлей?$array
имеет ассоциативный ключ, который совпадает$item
. Не говоря уже о возможности непреднамеренного совпадения части строки, когда в самой строке есть двойные кавычки. Я бы доверял этой функции только в маленьких / простых ситуациях, таких как этот вопрос.$item
содержит символы, которые испортили первый параметр (регулярное выражение)preg_match
Это сделает это:
in_array
работает только с одномерным массивом, поэтому вам нужно циклически проходитьin_array
по каждому подмассиву и запускать на каждомКак уже отмечали другие, это будет только для 2-мерного массива. Если у вас есть больше вложенных массивов, рекурсивная версия будет лучше. Смотрите другие ответы для примеров этого.
источник
)
в конце упомянутой строки отсутствует.in_array()
с третьим параметром, установленным вtrue
. Проверьте здесь, почему: stackoverflow.com/questions/37080581/…если ваш массив такой
Использовать это
пример :
echo in_multiarray("22", $array,"Age");
источник
источник
array_column()
Великая функция, но это не работало для меня , пока я не добавил
if($found) { break; }
кelseif
источник
Для многомерных детей:
in_array('needle', array_column($arr, 'key'))
Для одномерных детей:
in_array('needle', call_user_func_array('array_merge', $arr))
источник
array_column()
метода, этотcall_user_func_array('array_merge')
метод также работает с основанными на индексе дочерними массивами, +1Вы всегда можете сериализовать свой многомерный массив и сделать
strpos
:Различные документы для вещей, которые я использовал:
источник
Начиная с PHP 5.6 есть лучше и чище для оригинального ответа решение:
С многомерным массивом, подобным этому:
Мы можем использовать оператор splat :
Если у вас есть строковые ключи, как это:
Вы должны будете использовать
array_values
, чтобы избежать ошибкиCannot unpack array with string keys
:источник
Принятое решение (на момент написания) по jwueller
Совершенно правильно, но может иметь непреднамеренное поведение при слабом сравнении (параметр
$strict = false
).Из-за жонглирования типа PHP при сравнении значений разных типов
и
Оценивает,
true
потому что"example"
приведенint
и превращен в0
.(См. Почему PHP считает 0 равным строке? )
Если это не желаемое поведение, может быть удобно привести числовые значения к строке перед выполнением нестрого сравнения:
источник
Это первая функция такого типа, которую я нашел в руководстве по php для in_array . Функции в секциях комментариев не всегда самые лучшие, но если это не помогает, вы тоже можете посмотреть там :)
источник
Вот мое предложение, основанное на решении json_encode () с:
Если слово не найдено, оно все равно возвращает 0, равное ложному .
Надеюсь, поможет.
источник
00
в10000
илиlo
вHello
. Кроме того, произойдет сбой, если стрелка содержит любой символ, которыйjson_encode
убегает , например, двойные кавычки.Я считаю, что вы можете просто использовать array_key_exists :
источник
Я искал функцию, которая позволила бы мне искать и строки и массивы (как иголку) в массиве (стог сена), поэтому я добавил к ответу @jwueller .
Вот мой код:
источник
Это тоже работает, создавая сначала новый одномерный массив из исходного.
источник
Более короткая версия, для многомерных массивов, созданных на основе наборов результатов базы данных.
Вернется, если массив $ os_list содержит 'XP' в поле os_version.
источник
Я нашел действительно небольшое простое решение:
Если ваш массив:
тогда код будет выглядеть так:
источник
Я использовал этот метод работает для любого количества вложенных и не требует взлома
источник
Пожалуйста попробуйте:
Я не уверен в необходимости, но это может работать для вашего требования
источник
$b
ключи массива - это просто целые числа ... в этих массивах нет заданных ключей ... иarray_keys($b["irix"])
они просто выдадут ошибку, потому$b["irix"]
что не существует.что насчет array_search? кажется, это довольно быстро, чем foreach в соответствии с https://gist.github.com/Ocramius/1290076 ..
источник
вы можете использовать как это
http://php.net/manual/tr/function.array-intersect.php
источник