Comment supprimer un élément d'un tableau lorsque je connais le nom des éléments? par exemple:
J'ai un tableau:
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
l'utilisateur entre strawberry
strawberry
est retiré.
Pour bien expliquer:
J'ai une base de données qui stocke une liste d'éléments séparés par une virgule. Le code extrait la liste en fonction d'un choix de l'utilisateur où se trouve ce choix. Donc, s'ils choisissent fraise, le code extrait chaque entrée où la fraise est localisée, puis le convertit en un tableau en utilisant split (). Je veux leur supprimer les éléments choisis par l'utilisateur, pour cet exemple la fraise, du tableau.
Réponses:
Utilisez
array_search
pour obtenir la clé et la retirer avecunset
si elle est trouvée:array_search
renvoie false ( null jusqu'à PHP 4.2.0) si aucun élément n'a été trouvé.Et s'il peut y avoir plusieurs éléments avec la même valeur, vous pouvez utiliser
array_keys
pour obtenir les clés de tous les éléments:la source
$submenuArray
? (Notez que chaque boucle$submenuArray
sera écrasée.)Utiliser
array_diff()
pour une solution à 1 ligne:... Pas besoin de fonctions supplémentaires ou de boucle foreach.
la source
strawberry
ne soit pas dans le tableau initial, il deviendra disponible dans le$array_without_strawberries
tableau - code dangereux si vous voulez vous assurer qu'un élément donné n'est pas dans un tableau.$a = array_diff(array(), array('strawberry'));
- $ a est un tableau vide.la source
$my_array = array_values($my_array);
.in_array
etarray_search
). Utiliser le retour dearray_search
comme dans la réponse de Gumbo est plus efficaceSi vous utilisez un tableau simple ici (ce qui semble être le cas), vous devriez utiliser ce code à la place:
unset($array[$key])
supprime uniquement l'élément mais ne réorganise pas le tableau simple.Supposons que nous ayons un tableau et que nous utilisions array_splice:
Comparé à unset:
Remarquez comment
unset($array[$key])
ne réorganise pas le tableau.la source
unset
ne renvoie rien. Cejson_encode(unset($array[2]))
n'est donc pas approprié pour une comparaison.Vous pouvez utiliser un filtre de tableau pour supprimer les éléments selon une condition spécifique sur
$v
:la source
array_filter()
. Bien que j'utilise personnellement une fonction anonyme dans ma mise en œuvre, je pense que la bonne action sur SO serait de commenter ou de modifier la réponse de D.Martin si vous souhaitez apporter une micro-amélioration afin que cette page ne devienne pas gonflée. Veuillez supprimer cette réponse en double.Sera comme ça:
la source
Il s'agit d'une simple réitération qui peut supprimer plusieurs valeurs du tableau.
la source
array_diff()
. Comment cela a-t-il obtenu trois votes positifs. Personne ne devrait trouver cette réponse utile ou l'utiliser dans ses propres projets. Je recommande de supprimer cette réponse - cela permettrait de libérer votre compte d'une réponse de mauvaise qualité, de réduire le nombre de réponses sur cette page et de vous gagner un badge Discipliné. Je vais reporter mon vote défavorable afin que vous ayez le temps de supprimer pour une récompense.Juste vous pouvez faire une seule ligne. Ce sera supprimer l'élément du tableau
la source
J'utilise actuellement cette fonction:
Vous pouvez saisir un tableau ou seulement une chaîne avec le ou les éléments à supprimer. Écrivez-le comme ceci:
OU
$detils = array_delete('orange', $detils);
Il le réindexera également.
la source
Cette question a plusieurs réponses mais je veux ajouter quelque chose de plus car lorsque j'ai utilisé
unset
ouarray_diff
j'ai eu plusieurs problèmes pour jouer avec les index du nouveau tableau lorsque l'élément spécifique a été supprimé (car les index initiaux sont enregistrés)Je reviens à l'exemple:
ou
Si vous imprimez le résultat, vous obtiendrez:
Résultat :
Mais les index seront enregistrés et vous aurez donc accès à votre élément comme:
Et donc le tableau final n'est pas réindexé. Vous devez donc ajouter après le
unset
ouarray_diff
:Après cela, votre tableau aura un index normal:
Lié à cet article: Réindexer le tableau
J'espère que cela aidera
la source
Une meilleure approche serait peut-être de conserver vos valeurs sous forme de clés dans un tableau associatif, puis de l'appeler
array_keys()
lorsque vous voulez un tableau réel. De cette façon, vous n'avez pas besoin d'utiliserarray_search
pour trouver votre élément.la source
La réponse à la suppression du tableau PHP par valeur (pas par clé) donnée par https://stackoverflow.com/users/924109/rok-kralj
L'OMI est la meilleure réponse car elle supprime et ne mute pas
Cela se 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 gardant l'ancien intact contrairement à la réponse acceptée qui mute. Cela pourrait être un peu plus lent à cause de cela.
la source
Je cherchais la réponse à la même question et suis tombé sur ce sujet. Je vois deux manières principales: la combinaison de
array_search
&unset
et l'utilisation dearray_diff
. À première vue, il m'a semblé que la première méthode serait plus rapide, puisqu'elle ne nécessite pas la création d'un tableau supplémentaire (comme lors de l'utilisationarray_diff
). Mais j'ai écrit un petit benchmark et je me suis assuré que la deuxième méthode est non seulement plus concise, mais aussi plus rapide! Heureux de partager cela avec vous. :)https://glot.io/snippets/f6ow6biaol
la source
Je préférerais utiliser array_key_exists pour rechercher des clés dans des tableaux comme:
Array([0]=>'A',[1]=>'B',['key'=>'value'])
pour trouver efficacement le spécifié, car array_search et in_array () ne fonctionnent pas ici. Et supprimez des trucs avec unset () .
Je pense que cela aidera quelqu'un.
la source
Créer un tableau numérique avec supprimer une valeur de tableau particulière
Vous pouvez renvoyer ce lien.
la source
la source
En utilisant
array_seach()
, 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 en utilisantunset()
. Il reviendraFALSE
en cas d'échec, cependant il peut renvoyer une valeur "falsey" en cas de succès (votre clé peut être0
par exemple), c'est pourquoi la comparaison stricte!==
opérateur de est utilisé.L'
if()
instruction vérifiera siarray_search()
une valeur a été renvoyée et n'effectuera une action que si elle l'a fait.la source
la source
array_search()
-unset()
était déjà postée par John Conde des années avant la vôtre. Les réponses en double n'ont aucune valeur pour les lecteurs et sont en fait un inconvénient en raison du temps perdu lors du défilement et de la lecture d'informations redondantes. Veuillez supprimer cette réponse.la source
la source
la source