J'ai un tableau PHP qui ressemble à ceci:
Index Key Value
[0] 1 Awaiting for Confirmation
[1] 2 Assigned
[2] 3 In Progress
[3] 4 Completed
[4] 5 Mark As Spam
Quand je var_dump les valeurs du tableau, j'obtiens ceci:
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" } }
Je voulais supprimer Terminé et Marquer comme spam . Je sais que je peux unset[$array[3],$array[4])
, mais le problème est que parfois le numéro d'index peut être différent.
Existe-t-il un moyen de les supprimer en faisant correspondre le nom de la valeur au lieu de la valeur de clé?
Réponses:
Votre tableau est assez étrange: pourquoi ne pas utiliser simplement le
key
as index et levalue
as ... la valeur?Ne serait-il pas beaucoup plus facile si votre tableau était déclaré comme ceci:
Cela vous permettrait d'utiliser vos valeurs de
key
comme index pour accéder au tableau ...Et vous pourrez utiliser des fonctions pour rechercher les valeurs, telles que
array_search()
:Plus facile qu'avec votre baie, non?
Au lieu de cela, avec votre tableau qui ressemble à ceci:
Vous devrez boucler sur tous les éléments, analyser
value
et annuler les bons éléments:Même si c'est faisable, ce n'est pas si simple ... et j'insiste: ne pouvez-vous pas changer le format de votre tableau, pour travailler avec un système clé / valeur plus simple?
la source
la source
Pour les tableaux 2D ...
la source
Vous pouvez utiliser ceci
la source
Pourquoi ne pas utiliser array_diff?
Notez simplement que votre tableau serait réindexé.
la source
Essaye ça:
/ edit Comme mentionné par JohnP, cette méthode ne fonctionne que pour les tableaux non imbriqués.
la source
Pour ce faire, prenez votre tableau cible imbriqué et copiez-le en une seule étape dans un tableau non imbriqué. Supprimez la ou les clés, puis affectez le tableau découpé final au nœud imbriqué du tableau précédent. Voici un code pour simplifier les choses:
la source
Je ne suis pas d'accord avec la réponse acceptée. Parfois, une architecture d'application ne veut pas que vous manipuliez l'ID du tableau ou le rende peu pratique. Par exemple, j'utilise beaucoup CakePHP et une requête de base de données renvoie la clé primaire en tant que valeur dans chaque enregistrement, très similaire à ce qui précède.
En supposant que le tableau n'est pas stupidement grand, j'utiliserais array_filter. Cela créera une copie du tableau, moins les enregistrements que vous souhaitez supprimer, que vous pouvez réattribuer à la variable de tableau d'origine.
Bien que cela puisse sembler inefficace, il est en fait très en vogue ces jours-ci d'avoir des variables immuables, et le fait que la plupart des fonctions de tableau php renvoient un nouveau tableau plutôt que de passer à l'original implique que PHP veut un peu que vous fassiez cela aussi. Et plus vous travaillez avec des tableaux et que vous réalisez à quel point la fonction unset () est difficile et ennuyeuse, cette approche a beaucoup de sens.
En tous cas:
Vous pouvez utiliser n'importe quelle logique d'inclusion (par exemple votre champ id) dans la fonction intégrée que vous voulez.
la source
pour une utilisation d'élément de tableau unique
reset($item)
la source