Eu tenho uma matriz onde eu quero pesquisar o uid
e obter a chave da matriz.
Exemplos
Suponha que temos a seguinte matriz bidimensional:
$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'
)
);
A chamada de função search_by_uid(100)
(uid do primeiro usuário) deve retornar 0
.
A chamada de função search_by_uid(40489)
deve retornar 2
.
Tentei fazer loops, mas quero um código de execução mais rápido.
php
arrays
multidimensional-array
Rachit
fonte
fonte
array_column
respostas de uma linha. Modifiquei todos eles para retornar a matriz descoberta real, não apenas a chave, porque geralmente esse é o meu caso de uso. O método de função obteve 0,361, micro-atraso médio de busca-col 0,184 e micro-atraso de chaves-col 0,189 acima de 1000 execuções para cada método.Respostas:
Isso vai funcionar. Você deve chamar assim:
É importante saber que, se você estiver usando o
===
operador em comparação tipos têm que ser exatamente iguais, neste exemplo, você tem que procurarstring
ou simplesmente usar==
vez===
.Com base na resposta angoru . Nas versões posteriores do PHP (
>= 5.5.0
), você pode usar uma linha.Aqui está a documentação: http://php.net/manual/en/function.array-column.php .
fonte
array_column($userdb, 'uid')
porarray_map(function($v){return $v['uid'];},$userdb)
array_search
, não é?foreach
loop) terá um desempenho mais rápido porque para assim que a correspondência é encontrada. A solução mais recente precisa percorrer toda a matriz uma vez para extrair earray_column
, em seguida, percorrer uma segunda vez para executar a pesquisa (até encontrar uma correspondência). A solução mais recente é mais fácil de ler, mais conciso, mas o OP especificamente criado desempenho como um problemaSe você estiver usando (PHP 5> = 5.5.0), não precisará escrever sua própria função para isso, basta escrever esta linha e pronto.
Se você deseja apenas um resultado:
Para vários resultados
Caso você tenha um array associativo, como apontado nos comentários, poderá fazê-lo com:
Se você estiver usando PHP <5.5.0, poderá usar este backport , obrigado ramsey!
Atualização: Estou fazendo alguns benchmarks simples e o formulário de vários resultados parece ser o mais rápido, ainda mais rápido que a função personalizada Jakub!
fonte
array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
Nas versões posteriores do PHP (> = 5.5.0), você pode usar este recurso:
fonte
Criando a excelente resposta de Jakub , aqui está uma pesquisa mais generalizada que permitirá que a chave seja especificada (não apenas para uid):
Uso:
$results = searcharray('searchvalue', searchkey, $array);
fonte
Eu sei que isso já foi respondido, mas eu usei isso e estendi um pouco mais no meu código para que você não tivesse pesquisa apenas pelo uid. Eu só quero compartilhá-lo para qualquer pessoa que possa precisar dessa funcionalidade.
Aqui está o meu exemplo e lembre-se de que esta é minha primeira resposta. Peguei o array param, porque eu só precisava pesquisar um array específico, mas você poderia adicioná-lo facilmente. Eu queria pesquisar essencialmente por mais do que apenas o uid.
Além disso, na minha situação, pode haver várias chaves a serem retornadas como resultado da pesquisa por outros campos que podem não ser exclusivos.
Mais tarde, acabei escrevendo isso para me permitir procurar outro valor e chave associativa. Portanto, meu primeiro exemplo permite procurar um valor em qualquer chave associativa específica e retornar todas as correspondências.
Este segundo exemplo mostra onde um valor ('Taylor') é encontrado em uma determinada chave associativa (first_name) E outro valor (true) é encontrado em outra chave associativa (empregado) e retorna todas as correspondências (Chaves em que pessoas com nome próprio 'Taylor' AND são empregados).
Uso da função
Resultado
fonte
Parece que array_filter será a solução adequada para isso ...
Código PHP
fonte
syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
Modifiquei um dos exemplos abaixo da função de descrição array_search . A função
searchItemsByKey
retorna todos os valores pela chave $ da matriz multidimensional (N níveis). Talvez, seria útil para alguém. Exemplo:Código da função:
fonte
Aqui está um forro para o mesmo,
fonte
Mesmo que essa seja uma pergunta antiga e tenha uma resposta aceita, pensei em sugerir uma alteração na resposta aceita. Então, primeiro, eu concordo que a resposta aceita está correta aqui.
Substituindo a predefinição 'uid' por um parâmetro na função, agora chamar o código abaixo significa que você pode usar a única função em vários tipos de matriz. Pequena mudança, mas que faz a pequena diferença.
Exemplo de PHP Fiddle
fonte
null
e, em seguida, no código, comparando-ofalse
.Eu quero verificar que na matriz a seguir
$arr
existe 'abc' em sub-matrizes ou nãoEntão eu posso usar isso
Eu acho que essa é a maneira mais simples de definir
fonte
Eu tive que usar uma função que encontra todos os elementos em uma matriz. Então, modifiquei a função executada por Jakub Truneček da seguinte maneira:
fonte
fonte
você pode usar esta função; https://github.com/serhatozles/ArrayAdvancedSearch
fonte
fonte
Tente isto
fonte
Apenas compartilhe, talvez possa gostar disso.
fonte
Tente isso também
fonte
Com a ajuda do código acima, é possível encontrar quaisquer dados (parcialmente correspondentes) de qualquer coluna na matriz 2D, para que o ID do usuário possa ser encontrado conforme necessário em questão.
fonte
Expandindo a função @mayhem criada, este exemplo seria mais uma pesquisa "difusa", caso você queira apenas corresponder à parte (a maioria ) de uma sequência de pesquisa:
Por exemplo, o valor na matriz é Bem-vindo a Nova York! e você queria a primeira instância de apenas "Nova York!"
fonte
fonte
Se pergunta ie
Resp:
fonte
minha solução:
fonte