Question PHP array delete par valeur (pas la clé)


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 là une fois.

Je suis à la recherche de la fonction la plus simple pour effectuer cette tâche s'il vous plaît.


665
2017-08-29 00:44


origine


Réponses:


En utilisant array_search() et unset, essayez ce qui suit:

if (($key = array_search($del_val, $messages)) !== false) {
    unset($messages[$key]);
}

array_search() renvoie la clé de l'élément trouvé, qui peut être utilisée pour supprimer cet élément du tableau d'origine en utilisant unset(). Il reviendra FALSE en cas d'échec, il peut cependant renvoyer une valeur false-y en cas de succès (votre clé peut être 0 par exemple), ce qui explique pourquoi la comparaison stricte !== l'opérateur est utilisé.

le if() déclaration va vérifier si array_search() a renvoyé une valeur et n'effectuera une action que s'il l'a fait.


1240
2017-08-29 00:53



Eh bien, supprimer un élément de tableau est fondamentalement juste définir la différence avec un élément.

array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]

Il généralise bien, vous pouvez supprimer autant d'éléments que vous voulez 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.


473
2018-05-04 19:41



Une façon intéressante consiste à utiliser array_keys():

foreach (array_keys($messages, 401, true) as $key) {
    unset($messages[$key]);
}

le array_keys() La 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 ex. [1, 2, 3, 3, 4]).


96
2017-08-16 07:36



Si vous savez pour certain que votre tableau contiendra un seul élément avec cette valeur, vous pouvez le faire

$key = array_search($del_val, $array);
if (false !== $key) {
    unset($array[$key]);
}

Si, toutefois, votre valeur peut apparaître plus d'une fois dans votre tableau, vous pouvez le faire

$array = array_filter($array, function($e) use ($del_val) {
    return ($e !== $del_val);
});

Remarque: La deuxième option ne fonctionne que pour PHP5.3 + avec Fermetures


43
2017-08-29 00:56



$fields = array_flip($fields);
unset($fields['myvalue']);
$fields = array_flip($fields);

35
2017-08-01 17:26



Jetez un oeil au code suivant:

$arr = array('nice_item', 'remove_me', 'another_liked_item', 'remove_me_also');

Tu peux faire:

$arr = array_diff($arr, array('remove_me', 'remove_me_also'));

Et vous obtiendrez ce tableau:

array('nice_item', 'another_liked_item')

22
2018-03-16 12:47



Par le code suivant, les valeurs répétitives seront supprimées des messages $.

$messages = array_diff($messages, array(401));


18
2018-01-02 03:33



La meilleure façon est array_splice

array_splice($array, array_search(58, $array ), 1);

Raison du meilleur est ici à http://www.programmerinterview.com/index.php/php-questions/how-to-delete-an-element-from-an-array-in-php/


16
2018-04-23 13:34



Ou simplement, manière manuelle:

foreach ($array as $key => $value){
    if ($value == $target_value) {
        unset($array[$key]);
    }
}

C'est le plus sûr d'entre eux parce que vous avez un contrôle total sur votre tableau


15
2017-08-21 20:02