J'ai un tableau PHP comme suit:
$messages = [312, 401, 1599, 3, ...];
Je veux supprimer l'élément contenant la valeur $del_val
(par exemple, $del_val=401
), mais je ne connais pas sa clé. Cela pourrait aider: chaque valeur ne peut être présente qu'une seule fois .
Je recherche la fonction la plus simple pour effectuer cette tâche, s'il vous plaît.
Réponses:
À l'aide de
array_search()
etunset
, essayez ce qui suit:array_search()
renvoie la clé de l'élément qu'il trouve, qui peut être utilisée pour supprimer cet élément du tableau d'origine à l'aide deunset()
. Il retourneraFALSE
en cas d'échec, mais il peut retourner une valeur faux-y en cas de succès (votre clé peut être0
par exemple), c'est pourquoi l'!==
opérateur de comparaison strict est utilisé.L'
if()
instruction vérifie siarray_search()
une valeur a été renvoyée et n'exécute une action que si elle l'a fait.la source
array_diff()
serait plus lent car il compare deux tableaux, pas simplement en recherchant un commearray_search()
.$key
est0
?0
ou toute autre valeur de falsey, elle ne débloquera pas la valeur et votre code ne fonctionnera pas. Vous devriez tester$key === false
. (Eh bien, la suppression d'un élément du tableau est fondamentalement juste la différence avec un élément.
Il généralise bien, vous pouvez supprimer autant d'éléments que vous le souhaitez en même temps, si vous le souhaitez.
Avertissement: Notez que ma solution produit une nouvelle copie du tableau tout en conservant l'ancien contrairement à la réponse acceptée qui mute. Choisissez celui dont vous avez besoin.
la source
[$element]
j'ai utilisé à laarray($element)
place. Pas de biggie, mais je voulais juste que toute personne ayant un problème similaire sache qu'elle n'était pas seulearray_diff
utilisé(string) $elem1 === (string) $elem2
comme condition d'égalité, et non$elem1 === $elem2
comme on pourrait s'y attendre. Le problème signalé par @ nischayn22 en est la conséquence. Si vous voulez quelque chose à utiliser comme fonction utilitaire qui fonctionnera pour des tableaux d'éléments arbitraires (qui pourraient être des objets), la réponse de Bojangle pourrait être meilleure pour cette raison.array_diff()
et déplace ainsi le runtime jusqu'à O (n lg n) de O (n).Une façon intéressante consiste à utiliser
array_keys()
:La
array_keys()
fonction prend deux paramètres supplémentaires pour renvoyer uniquement les clés pour une valeur particulière et si une vérification stricte est requise (c'est-à-dire en utilisant === pour la comparaison).Cela peut également supprimer plusieurs éléments de tableau avec la même valeur (par exemple
[1, 2, 3, 3, 4]
).la source
array_values()
; les touches restantes sont toujours dans le même ordre, donc techniquement ce n'est pas "non trié"Si vous savez pour sûr que votre tableau ne contiendra qu'un seul élément avec cette valeur, vous pouvez le faire
Si, cependant, votre valeur peut apparaître plusieurs fois dans votre tableau, vous pouvez le faire
Remarque: La deuxième option ne fonctionne que pour PHP5.3 + avec fermetures
la source
la source
Jetez un œil au code suivant:
Tu peux faire:
Et cela vous donnera ce tableau:
la source
La meilleure façon est
array_splice
Reason for Best est ici sur http://www.programmerinterview.com/index.php/php-questions/how-to-delete-an-element-from-an-array-in-php/
la source
[1, 2, 4 => 3]
.3
, le tableau sera[1, 2, 3]
; en d'autres termes, la valeur n'a pas été supprimée. Pour être clair, je ne dis pas qu'il échoue dans tous les scénarios, juste celui-ci.Ou simplement, de manière manuelle:
C'est le plus sûr d'entre eux car vous avez un contrôle total sur votre baie
la source
array_splice()
au lieu deunset()
réorganisera également les index de tableau, ce qui pourrait être mieux dans ce cas.Par le code suivant, les valeurs répétitives seront supprimées des messages $.
$messages = array_diff($messages, array(401));
la source
Si vous avez PHP
5.3+
, il y a le code d'une ligne:la source
$value
, donc vraiment elle doit être mise dans une mini-classe pour que vous puissiez y accéder$value
dans la fermeture ....Production
Array ( [0] => 312 [1] => 1599 [2] => 3 )
la source
tu peux faire:
Explication : supprimez l'élément qui possède la clé
401
après avoir inversé le tableau.la source
401
?Pour supprimer plusieurs valeurs, essayez celle-ci:
la source
Emprunté la logique de underscore.JS _.reject et créé deux fonctions (les gens préfèrent les fonctions !!)
array_reject_value: Cette fonction rejette simplement la valeur spécifiée (fonctionne également pour PHP4,5,7)
array_reject: Cette fonction rejette simplement la méthode appelable (fonctionne pour PHP> = 5.3)
Ainsi, dans notre exemple actuel, nous pouvons utiliser les fonctions ci-dessus comme suit:
ou encore mieux: (car cela nous donne une meilleure syntaxe à utiliser comme celle de array_filter )
Ce qui précède peut être utilisé pour des choses plus compliquées comme disons que nous aimerions supprimer toutes les valeurs supérieures ou égales à 401, nous pourrions simplement le faire:
la source
Essayez ceci, c'est le moyen le meilleur et le plus rapide pour supprimer l'élément par valeur
la source
La réponse @Bojangles m'a aidé. Je vous remercie.
Dans mon cas, le tableau peut être associatif ou non, j'ai donc ajouté la fonction suivante
Cordialement
la source
code simple (grâce à array_diff () ), utilisez ce qui suit:
la source
La réponse acceptée convertit le tableau en tableau associatif, donc, si vous souhaitez le conserver en tant que tableau non associatif avec la réponse acceptée, vous devrez peut-être
array_values
également l' utiliser .La référence est ici
la source
Selon votre exigence " chaque valeur ne peut être là que pour une fois " si vous êtes simplement intéressé à conserver des valeurs uniques dans votre tableau, alors c'est
array_unique()
peut-être ce que vous recherchez.Contribution:
Résultat:
la source
Si les valeurs que vous souhaitez supprimer sont ou peuvent être dans un tableau. Utilisez la fonction array_diff . Semble fonctionner très bien pour des choses comme ça.
array_diff
la source
Je sais que ce n'est pas efficace du tout mais c'est simple, intuitif et facile à lire.
Donc, si quelqu'un cherche une solution pas si sophistiquée qui peut être étendue pour fonctionner avec plus de valeurs ou des conditions plus spécifiques .. voici un code simple:
la source
Obtenez la clé du tableau avec
array_search()
.la source
Si vous ne connaissez pas sa clé, cela signifie que cela n'a pas d'importance.
Vous pouvez placer la valeur comme clé, cela signifie qu'elle trouvera instantanément la valeur. Mieux que d'utiliser la recherche dans tous les éléments encore et encore.
la source
Un one-liner utilisant l'
or
opérateur:la source
vous pouvez référer cette URL : pour la fonction
La sortie devrait alors être,
la source
Une autre idée pour supprimer la valeur d'un tableau, utilisez array_diff. Si je veux
(Doc: http://php.net/manual/fr/function.array-diff.php )
la source
Je pense que la manière la plus simple serait d'utiliser une fonction avec une boucle foreach:
La sortie sera:
la source
Avec PHP 7.4 en utilisant les fonctions fléchées:
Pour le conserver dans un tableau non associatif, enveloppez-le avec
array_values()
:la source