Eu quero percorrer uma matriz com foreach
para verificar se existe um valor. Se o valor existir, desejo excluir o elemento que o contém.
Eu tenho o seguinte código:
foreach($display_related_tags as $tag_name) {
if($tag_name == $found_tag['name']) {
// Delete element
}
}
Não sei como excluir o elemento depois que o valor for encontrado. Como eu o apago?
Eu tenho que usar foreach
para este problema. Provavelmente existem alternativas para foreach
, e você pode compartilhá-las.
$key => &$tag_name
stackoverflow.com/a/2008893/922522json_encode()
. Você pode resolver isso$display_related_tags = array_values ($display_related_tags);
depois doforeach
loop.$projects = array_filter($projects, function ($project) { return count($project->roles) > 0; });
converte resultado em objeto.Uma solução melhor é usar a
array_filter
função:Como a documentação do php lê:
fonte
ARRAY_FILTER_USE_KEY - pass key as the only argument to callback instead of the value ARRAY_FILTER_USE_BOTH - pass both value and key as arguments to callback instead of the value
Default is 0 which will pass value as the only argument to callback instead.
Dito isto, ler a resposta novamente neste caso, é claro, não importaria como você afirma.display_related_tags = array_values(display_related_tags);
la.fonte
Em vez de executar o loop foreach () na matriz, seria mais rápido usar array_search () para encontrar a chave correta. Em matrizes pequenas, eu usaria o foreach para obter melhor legibilidade, mas para matrizes maiores ou código frequentemente executado, isso deve ser um pouco mais ideal:
O operador de comparação estrita! == é necessário, porque array_search () pode retornar 0 como o índice do $ unwantedValue.
Além disso, o exemplo acima removerá apenas o primeiro valor $ unwantedValue, se o $ unwantedValue puder ocorrer mais de uma vez na matriz $, você deve usar array_keys () para encontrar todos eles:
Verifique http://php.net/manual/en/function.array-search.php para obter mais informações.
fonte
se você tiver um cenário no qual precisará remover mais de um valor da matriz foreach, nesse caso, precisará passar o valor por referência para cada um: tento explicar este cenário:
no segundo loop, você deseja desabilitar as primeiras entradas de loop não retornando a iteração para fins de desempenho, ou então desabilitadas da memória também, porque na memória elas apresentam e entrarão em iterações.
fonte
Já existem respostas que estão esclarecendo como desabilitar. Em vez de repetir o código em todas as suas classes, faça as funções abaixo e use-o no código sempre que necessário. Na lógica de negócios, às vezes você não deseja expor algumas propriedades. Veja abaixo uma chamada de linha para remover
Ligue como:
fonte
Como já foi mencionado, você deseja fazer um foreach com a chave e desmarcar usando a chave - mas observe que a mutação de uma matriz durante a iteração é geralmente uma má ideia, embora eu não tenha certeza das regras do PHP sobre isso. de imediato.
fonte
foreach
oufor
construções em vez de iteração em geral?