Eu tenho uma matriz PHP que se parece com isto:
Index Key Value
[0] 1 Awaiting for Confirmation
[1] 2 Assigned
[2] 3 In Progress
[3] 4 Completed
[4] 5 Mark As Spam
Quando var_dump os valores do array, obtenho o seguinte:
array(5) { [0]=> array(2) { ["key"]=> string(1) "1" ["value"]=> string(25) "Awaiting for Confirmation" } [1]=> array(2) { ["key"]=> string(1) "2" ["value"]=> string(9) "Assigned" } [2]=> array(2) { ["key"]=> string(1) "3" ["value"]=> string(11) "In Progress" } [3]=> array(2) { ["key"]=> string(1) "4" ["value"]=> string(9) "Completed" } [4]=> array(2) { ["key"]=> string(1) "5" ["value"]=> string(12) "Mark As Spam" } }
Queria remover Concluído e Marcar como spam . Eu sei que posso unset[$array[3],$array[4])
, mas o problema é que às vezes o número do índice pode ser diferente.
Existe uma maneira de removê-los combinando o nome do valor em vez do valor da chave?
Respostas:
Seu array é um tanto estranho: por que não usar apenas o
key
índice as e asvalue
... o valor?Não seria muito mais fácil se seu array fosse declarado assim:
Isso permitiria a você usar seus valores de
key
como índices para acessar a matriz ...E você seria capaz de usar funções para pesquisar os valores, como
array_search()
:Mais fácil do que com seu array, não?
Em vez disso, com sua matriz semelhante a esta:
Você terá que percorrer todos os itens para analisar
value
e remover a configuração dos itens certos:Mesmo se possível, não é tão simples ... e eu insisto: você não pode mudar o formato do seu array, para trabalhar com um sistema de chave / valor mais simples?
fonte
fonte
Para matrizes 2D ...
fonte
Você pode usar isso
fonte
Por que não use array_diff?
Apenas observe que sua matriz seria reindexada.
fonte
Experimente isto:
/ edit Conforme mencionado por JohnP, este método funciona apenas para matrizes não aninhadas.
fonte
A maneira de fazer isso é pegar seu array de destino aninhado e copiá-lo em uma única etapa para um array não aninhado. Exclua a (s) chave (s) e atribua a matriz aparada final ao nó aninhado da matriz anterior. Aqui está um código para simplificar:
fonte
Eu meio que discordo da resposta aceita. Às vezes, uma arquitetura de aplicativo não quer que você mexa com a id do array ou o torna inconveniente. Por exemplo, eu uso bastante o CakePHP, e uma consulta ao banco de dados retorna a chave primária como um valor em cada registro, muito semelhante ao anterior.
Supondo que a matriz não seja estupidamente grande, eu usaria array_filter. Isso criará uma cópia da matriz, menos os registros que deseja remover, que você pode atribuir de volta à variável da matriz original.
Embora isso possa parecer ineficiente, está na verdade muito em voga hoje em dia ter variáveis imutáveis, e o fato de que a maioria das funções de array php retornam um novo array em vez de interferir no original implica que o PHP meio que quer que você faça isso também. E quanto mais você trabalha com arrays e percebe o quão difícil e irritante é a função unset (), essa abordagem faz muito sentido.
De qualquer forma:
Você pode usar qualquer lógica de inclusão (por exemplo, seu campo de id) na função incorporada que você deseja.
fonte
para uso de item de matriz única
reset($item)
fonte