Como faço para remover um elemento de uma matriz quando sei o nome dos elementos? por exemplo:
Eu tenho uma matriz:
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
o usuário entra strawberry
strawberry
é removido.
Para explicar completamente:
Eu tenho um banco de dados que armazena uma lista de itens separados por vírgula. O código puxa a lista com base na escolha do usuário em que essa opção está localizada. Portanto, se escolherem o morango, o código será puxado em todas as entradas onde o morango estiver localizado e o converterá em uma matriz usando split (). Quero que eles removem os itens escolhidos pelo usuário, para este exemplo morango, da matriz.
Respostas:
Use
array_search
para obter a chave e removê-la com,unset
se encontrada:array_search
retorna false ( nulo até o PHP 4.2.0) se nenhum item foi encontrado.E se pode haver vários itens com o mesmo valor, você pode usar
array_keys
para obter as chaves de todos os itens:fonte
$submenuArray
? (Observe que a cada loop$submenuArray
será sobrescrito.) #Use
array_diff()
para solução de 1 linha:... Não há necessidade de funções extras ou loop foreach.
fonte
strawberry
não estiver na matriz inicial, ele ficará disponível na$array_without_strawberries
matriz - código perigoso se você quiser garantir que um determinado elemento não esteja em uma matriz.$a = array_diff(array(), array('strawberry'));
- $ a é uma matriz vazia.fonte
$my_array = array_values($my_array);
.in_array
earray_search
). Usar o retorno dearray_search
como na resposta de Gumbo é mais eficaz #Se você estiver usando uma matriz simples aqui (o que parece ser o caso), você deve usar este código:
unset($array[$key])
remove apenas o elemento, mas não reordena a matriz simples.Supostamente, temos uma matriz e usamos array_splice:
Comparado ao não configurado:
Observe como
unset($array[$key])
não reordena a matriz.fonte
unset
não retorna nada. Portanto,json_encode(unset($array[2]))
não é apropriado para uma comparação.Você pode usar o filtro de matriz para remover os itens por uma condição específica em
$v
:fonte
array_filter()
. Enquanto eu pessoalmente usaria uma função anônima em minha implementação, acredito que a ação correta no SO seria comentar ou editar a resposta de D.Martin se você deseja fazer um micro aperfeiçoamento para que esta página não fique inchada. Exclua esta resposta duplicada.Será assim:
fonte
Essa é uma reiteração simples que pode excluir vários valores na matriz.
fonte
array_diff()
. Como isso conseguiu três votos positivos. Ninguém deve achar esta resposta útil ou usá-la em seus próprios projetos. Eu recomendo excluir esta resposta - isso serviria para liberar sua conta de uma resposta de baixa qualidade, reduzir o número de respostas nesta página e ganhar um distintivo disciplinado. Adiarei meu voto negativo para que você tenha tempo de excluir e receber uma recompensa.Apenas você pode fazer linha única. Será remover o elemento da matriz
fonte
Atualmente, estou usando esta função:
Você pode inserir uma matriz ou apenas uma string com os elementos que devem ser removidos. Escreva assim:
OU
$detils = array_delete('orange', $detils);
Também vai reindexá-lo.
fonte
Esta pergunta tem várias respostas, mas quero acrescentar algo mais, porque quando usei
unset
ouarray_diff
tive vários problemas para brincar com os índices da nova matriz quando o elemento específico foi removido (porque o índice inicial é salvo)Volto ao exemplo:
ou
Se você imprimir o resultado, obterá:
Resultado:
Mas os índices serão salvos e, assim, você acessará seu elemento como:
E assim a matriz final não é re-indexada. Então você precisa adicionar após o
unset
ouarray_diff
:Depois disso, sua matriz terá um índice normal:
Relacionado a este post: Re-Index Array
Espero que ajude
fonte
Uma abordagem melhor talvez seja manter seus valores como chaves em uma matriz associativa e, em seguida, invocá
array_keys()
-la quando desejar a matriz real. Dessa forma, você não precisa usararray_search
para encontrar seu elemento.fonte
A resposta para a exclusão do array PHP por valor (não chave) Fornecida por https://stackoverflow.com/users/924109/rok-kralj
A IMO é a melhor resposta, pois remove e não muda
Ele generaliza bem, você pode remover quantos elementos quiser ao mesmo tempo, se quiser.
Isenção de responsabilidade: observe que minha solução produz uma nova cópia da matriz, mantendo a antiga intacta, em contraste com a resposta aceita que sofre mutação. Pode ser um pouco mais lento por causa disso.
fonte
Eu estava procurando a resposta para a mesma pergunta e me deparei com este tópico. Eu vejo duas maneiras principais: a combinação de
array_search
&unset
e o uso dearray_diff
. À primeira vista, pareceu-me que o primeiro método seria mais rápido, pois não requer a criação de uma matriz adicional (como ao usararray_diff
). Mas eu escrevi uma pequena referência e me certifiquei de que o segundo método não fosse apenas mais conciso, mas também mais rápido! Fico feliz em compartilhar isso com você. :)https://glot.io/snippets/f6ow6biaol
fonte
Eu preferiria usar array_key_exists para procurar chaves em matrizes como:
Array([0]=>'A',[1]=>'B',['key'=>'value'])
para encontrar o especificado efetivamente, já que array_search e in_array () não funcionam aqui. E remova coisas com unset () .
Eu acho que vai ajudar alguém.
fonte
Criar matriz numérica com excluir valor específico da matriz
Você pode consultar este link ..
fonte
fonte
Usando
array_seach()
, tente o seguinte:array_search()
retorna a chave do elemento encontrado, que pode ser usado para remover esse elemento da matriz original usandounset()
. Ele retornaráFALSE
em caso de falha, mas poderá retornar um valor "falsey" em caso de sucesso (sua chave pode ser,0
por exemplo), razão pela qual o!==
operador de comparação estrita é usado.A
if()
instrução verificará searray_search()
um valor retornou e só executará uma ação se tiver retornado.fonte
fonte
array_search()
-unset()
já foi publicado por John Conde anos antes do seu. Respostas duplicadas não têm valor para os leitores e são realmente um inconveniente devido ao tempo perdido ao rolar e ler informações redundantes. Por favor, apague esta resposta.fonte
fonte
fonte