A matriz se parece com:
[0] => stdClass Object
(
[ID] => 420
[name] => Mary
)
[1] => stdClass Object
(
[ID] => 10957
[name] => Blah
)
...
E eu tenho uma variável inteira chamada $v
.
Como eu poderia selecionar uma entrada de matriz que tenha um objeto em que a ID
propriedade tenha o $v
valor?
isset($item)
mas eu prefiro inicializar as variáveis corretamente #if($v == $struct["ID"]){...
YurkamTim está certo. Precisa apenas de uma modificação:
Após a função ($), você precisa de um ponteiro para a variável externa por "use (& $ managedValue)" e, em seguida, pode acessar a variável externa. Além disso, você pode modificá-lo.
fonte
&
não é necessário ao importar$searchedValue
para o escopo de fechamento. O&
é usado para criar uma referência que é necessária apenas se$searchedValue
tiver sido modificada dentro do fechamento.global
era o único era compartilhar dados em funções! Mas é uma pena se isso é realmente lento. :(fonte
Encontrei uma solução mais elegante aqui . Adaptado à pergunta, pode parecer:
fonte
array_filter
retorna uma matriz e não para no primeiro valor encontrado.$searchedValue
dentro da função. Mas lá fora está.$searchedValue
está fora do escopo de fechamento. Em segundo lugar, como você acha que esses métodos de matriz funcionam? Todos eles loop sobre a matriz internamente$searchedValue
necessidade de escreverfunction ($e) use ($searchedValue) {
Usar array_column para indexar novamente poupará tempo se você precisar encontrar várias vezes:
Então você pode simplesmente
$lookup[$id]
à vontade.fonte
Usá-lo da maneira que você queria seria algo como:
fonte
Experimentar
exemplo de trabalho aqui
fonte
Corrigindo um pequeno erro do @YurkaTim , sua solução funciona para mim, mas adicionando
use
:Para usar
$searchedValue
, dentro da função, uma solução pode estaruse ($searchedValue)
após os parâmetros da funçãofunction ($e) HERE
.a
array_filter
função retornará apenas$neededObject
se a condição de retorno fortrue
Se
$searchedValue
é uma sequência ou número inteiro:Se
$searchedValue
for o array onde precisamos verificar com uma lista:fonte
var_dump($neededObject);
:)Às vezes gosto de usar a função array_reduce () para realizar a pesquisa. É semelhante ao array_filter (), mas não afeta a matriz pesquisada, permitindo realizar várias pesquisas na mesma matriz de objetos.
fonte
if ($current_item->someProperty == $needle){ $result_array[] = $current_item; }
Eu fiz isso com algum tipo de mapa de teclas Java. Se você fizer isso, não precisará repetir a matriz de objetos todas as vezes.
resultado:
fonte
Maneira de obter instantaneamente o primeiro valor:
fonte
Publiquei o que eu uso para resolver esse mesmo problema de forma eficiente aqui, usando um algoritmo de pesquisa binária rápido: https://stackoverflow.com/a/52786742/1678210
Eu não queria copiar a mesma resposta. Alguém havia perguntado um pouco diferente, mas a resposta é a mesma.
fonte