Eu uso in_array()
para verificar se existe um valor em uma matriz como abaixo,
$a = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $a))
{
echo "Got Irix";
}
//print_r($a);
mas e uma matriz multidimensional (abaixo) - como posso verificar se esse valor existe na matriz múltipla?
$b = array(array("Mac", "NT"), array("Irix", "Linux"));
print_r($b);
ou eu não deveria estar usando in_array()
quando se trata da matriz multidimensional?
php
arrays
multidimensional-array
laukok
fonte
fonte
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
for uma matriz comis_array()
função. Se não for um array - prossiga com um cenário diferente.Respostas:
in_array()
não funciona em matrizes multidimensionais. Você pode escrever uma função recursiva para fazer isso por você:Uso:
fonte
_r
análogoprint_r()
, por exemplo). Ele desce em todas as matrizes aninhadas para procurar o valor até que não haja mais matrizes a serem encontradas. Dessa forma, você pode pesquisar matrizes de complexidade arbitrária em vez de apenas dois níveis de profundidade.Se você souber em qual coluna pesquisar, poderá usar array_search () e array_column ():
Essa ideia está na seção de comentários para array_search () no manual do PHP;
fonte
array_column
Isso também funcionará.
Uso:
fonte
foreach
loop.$array
que possui uma chave associativa correspondente$item
. Sem mencionar o potencial de corresponder involuntariamente parte de uma sequência de caracteres quando houver aspas duplas na própria sequência. Eu confiaria apenas nessa função em situações pequenas / simples como essa pergunta.$item
contiver caracteres que estragam o primeiro parâmetro (expressão regular) depreg_match
Isso fará isso:
in_array
opera apenas em uma matriz unidimensional, portanto, você precisa fazer um loop sobre cada sub-matriz e executarin_array
em cada uma.Como outros observaram, isso será apenas para uma matriz bidimensional. Se você tiver mais matrizes aninhadas, uma versão recursiva seria melhor. Veja as outras respostas para exemplos disso.
fonte
)
falta no final da linha mencionada.in_array()
com o terceiro parâmetro definido comotrue
. Confira aqui o porquê: stackoverflow.com/questions/37080581/…se sua matriz assim
Usa isto
exemplo:
echo in_multiarray("22", $array,"Age");
fonte
fonte
array_column()
Ótima função, mas não funcionou para mim até eu adicionar
if($found) { break; }
oelseif
fonte
Para crianças multidimensionais:
in_array('needle', array_column($arr, 'key'))
Para crianças unidimensionais:
in_array('needle', call_user_func_array('array_merge', $arr))
fonte
array_column()
método, ocall_user_func_array('array_merge')
método também funciona com matrizes filho baseadas em índice, +1Você sempre pode serializar sua matriz multidimensional e fazer um
strpos
:Vários documentos para as coisas que usei:
fonte
Desde o PHP 5.6, existe uma solução melhor e mais limpa para a resposta original:
Com uma matriz multidimensional como esta:
Podemos usar o operador splat :
Se você tiver chaves de seqüência de caracteres como esta:
Você precisará usar
array_values
para evitar o erroCannot unpack array with string keys
:fonte
A solução aceita (no momento da redação) por jwueller
Está perfeitamente correto, mas pode ter um comportamento não intencional ao fazer uma comparação fraca (o parâmetro
$strict = false
).Devido ao malabarismo de tipos do PHP ao comparar valores de tipos diferentes,
e
Avalia
true
porque"example"
éint
convertido e transformado em0
.(Veja Por que o PHP considera 0 igual a uma string? )
Se esse não for o comportamento desejado , pode ser conveniente converter valores numéricos para string antes de fazer uma comparação não estrita:
fonte
Esta é a primeira função deste tipo que eu encontrei no manual php para in_array . As funções nas seções de comentários nem sempre são as melhores, mas se isso não funcionar, você também pode procurar :)
fonte
Aqui está minha proposição baseada na solução json_encode () com:
Se a palavra não for encontrada, ainda retornará 0 igual a falso .
Espero que ajude.
fonte
00
into10000
oulo
intoHello
. Além disso, falhará se a agulha contiver qualquer caractere quejson_encode
escape , como aspas duplas.Eu acredito que você pode usar array_key_exists hoje em dia:
fonte
Eu estava procurando por uma função que me permitisse procurar por strings e matrizes (como agulha) na matriz (palheiro), então adicionei à resposta por @jwueller .
Aqui está o meu código:
fonte
Também funciona criando primeiro um novo array unidimensional a partir do original.
fonte
Versão mais curta, para matrizes multidimensionais criadas com base nos conjuntos de resultados do banco de dados.
Retornará se a matriz $ os_list contiver 'XP' no campo os_version.
fonte
Encontrei uma solução simples muito pequena:
Se sua matriz for:
então o código será como:
fonte
Eu usei esse método funciona para qualquer número de aninhados e não requer hackers
fonte
Tente por favor:
Não tenho certeza sobre a necessidade, mas isso pode funcionar para sua exigência
fonte
$b
As chaves da matriz são apenas números inteiros ... não há chaves especificadas nessas matrizes ... earray_keys($b["irix"])
apenas lançará um erro, porque$b["irix"]
não existe.e quanto ao array_search? parece muito mais rápido que foreach, de acordo com https://gist.github.com/Ocramius/1290076 ..
fonte
você pode usar assim
http://php.net/manual/tr/function.array-intersect.php
fonte