PHP: comment supprimer un élément spécifique d'un tableau?

Comment puis-je supprimer un élément d'un tableau Quand 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 supprimé.

pour expliquer pleinement:

j'ai une base de données qui stocke une liste d'éléments séparés par une virgule. Le code tire dans la liste basée sur un choix de l'utilisateur où ce choix est situé. Donc, si ils choisissent strawberry qu'ils codent tire dans chaque entrée où strawberry est localisé puis convertit cela en un tableau en utilisant split(). Je veux qu'ils retirent les articles choisis par l'utilisateur, pour cet exemple de fraise, de la rangée.

118
demandé sur Community 2010-03-15 20:05:30

19 réponses

utilisez array_search pour obtenir la clé et retirez-la avec unset si trouvé:

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

array_search renvoie false ( null jusqu'à ce que 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:

foreach (array_keys($array, 'strawberry') as $key) {
    unset($array[$key]);
}
233
répondu Gumbo 2010-03-15 17:24:33

utiliser array_diff() pour la solution à 1 ligne:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi', 'strawberry'); //throw in another 'strawberry' to demonstrate that it removes multiple instances of the string
$array_without_strawberries = array_diff($array, array('strawberry'));
print_r($array_without_strawberries);

... pas besoin de fonctions supplémentaires ou de boucle.

105
répondu ills 2013-09-17 14:07:43
if (in_array('strawberry', $array)) 
{
    unset($array[array_search('strawberry',$array)]);
}
33
répondu John Conde 2013-09-27 10:46:39

si vous utilisez un tableau simple ici( ce qui semble être le cas), vous devriez utiliser ce code à la place:

if (($key = array_search('strawberry', $array)) !== false) {
    array_splice($array, $key, 1);
}

unset($array[$key]) supprime seulement l'élément mais ne réordonne pas le tableau.

supposément nous avons un tableau et utilisons array_splice:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
array_splice($array, 2, 1);
json_encode($array); 
// yields the array ['apple', 'orange', 'blueberry', 'kiwi']

par rapport à unset:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
unset($array[2]);
json_encode($array);
// yields an object {"0": "apple", "1": "orange", "3": "blueberry", "4": "kiwi"}

remarquez que unset($array[$key]) ne réordonne pas le tableau.

16
répondu ericluwj 2017-12-05 18:45:52

$arr = \array_filter($arr, function ($v) { return $v != 'some_value'; }

6
répondu srcspider 2013-02-20 14:32:58

il s'agit d'une réitération simple qui peut supprimer plusieurs valeurs dans le tableau.

    // Your array
    $list = array("apple", "orange", "strawberry", "lemon", "banana");

    // Initilize what to delete
    $delete_val = array("orange", "lemon", "banana");

    // Search for the array key and unset   
    foreach($delete_val as $key){
        $keyToDelete = array_search($key, $list);
        unset($list[$keyToDelete]);
    }
4
répondu mmr 2015-01-28 01:45:31

j'utilise actuellement cette fonction:

function array_delete($del_val, $array) {
    if(is_array($del_val)) {
         foreach ($del_val as $del_key => $del_value) {
            foreach ($array as $key => $value){
                if ($value == $del_value) {
                    unset($array[$key]);
                }
            }
        }
    } else {
        foreach ($array as $key => $value){
            if ($value == $del_val) {
                unset($array[$key]);
            }
        }
    }
    return array_values($array);
}

vous pouvez entrer un tableau ou seulement une chaîne avec l'élément(s) qui doit être supprimé. Ecrivez comme ceci:

$detils = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$detils = array_delete(array('orange', 'apple'), $detils);

ou

$detils = array_delete('orange', $detils);

il va aussi réindexer.

3
répondu jankal 2014-10-30 09:13:16

sera comme ceci:

 function rmv_val($var)
 {
     return(!($var == 'strawberry'));
 }

 $array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');

 $array_res = array_filter($array, "rmv_val");
2
répondu D.Martin 2010-03-15 17:39:46

Une meilleure approche serait peut-être de garder vos valeurs clés dans un tableau associatif, et ensuite appeler array_keys() lorsque vous souhaitez tableau réel. De cette façon, vous n'avez pas besoin d'utiliser array_search pour trouver votre élément.

1
répondu jishi 2017-05-01 03:38:29

la réponse à La PHP suppression de tableau par valeur (pas de clé) Donnée par https://stackoverflow.com/users/924109/rok-kralj

IMO est la meilleure réponse comme il enlève et ne mute pas

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

il généralise bien, vous pouvez enlever autant d'éléments que vous voulez en même temps, si vous voulez.

avertissement: notez que ma solution produit une nouvelle copie du tableau tout en gardant l'ancienne intacte en contraste avec la réponse acceptée qui mute. Il pourrait être un peu plus lent à cause de cela.

1
répondu hounded 2017-10-04 21:22:39

cette question a plusieurs réponses mais je veux ajouter quelque chose de plus parce que lorsque j'ai utilisé unset ou array_diff j'ai eu plusieurs problèmes à jouer avec les index du nouveau tableau lorsque l'élément spécifique a été supprimé (parce que l'index initial sont sauvegardés)

je reviens à l'exemple:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$array_without_strawberries = array_diff($array, array('strawberry'));

ou

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
unset($array[array_search('strawberry', $array)]);

si vous imprimez le résultat vous obtiendrez:

foreach ($array_without_strawberries as $data) {
   print_r($data);
}

résultat:

> apple
> orange
> blueberry
> kiwi

mais les index seront sauvegardés et donc vous accéderez à votre élément comme:

$array_without_strawberries[0] > apple
$array_without_strawberries[1] > orange
$array_without_strawberries[3] > blueberry
$array_without_strawberries[4] > kiwi

et donc le tableau final n'est pas ré-indexé. Vous devez donc ajouter après le unset ou array_diff :

$array_without_strawberries = array_values($array);

après cela votre tableau aura un index normal:

$array_without_strawberries[0] > apple
$array_without_strawberries[1] > orange
$array_without_strawberries[2] > blueberry
$array_without_strawberries[3] > kiwi

Liées à ce poste : Re-Index Array

enter image description here

j'Espère que ça aidera

1
répondu Jordan Montel 2018-05-25 10:16:06

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 le spécifié efficacement, puisque array_search et in_array() ne fonctionnent pas ici. Et faire enlever la substance avec unset () .

je pense que ça aidera quelqu'un.

0
répondu ddsultan 2014-01-22 12:36:15

créer tableau numérique avec Supprimer la valeur particulière du tableau

    <?php
    // create a "numeric" array
    $animals = array('monitor', 'cpu', 'mouse', 'ram', 'wifi', 'usb', 'pendrive');

    //Normarl display
    print_r($animals);
    echo "<br/><br/>";

    //If splice the array
    //array_splice($animals, 2, 2);
    unset($animals[3]); // you can unset the particular value
    print_r($animals);

    ?>

vous pouvez renvoyer ce lien..

0
répondu Sashtha Manik 2016-06-11 12:33:39
$remove= "strawberry";
$array = ["apple", "orange", "strawberry", "blueberry", "kiwi"];
foreach ($array as $key => $value) {
        if ($value!=$remove) {
        echo $value.'<br/>';
                continue;
        }
}
0
répondu Krishna Jonnalagadda 2017-10-14 06:15:35
<?php 
$array = array("apple", "orange", "strawberry", "blueberry", "kiwi");
$delete = "strawberry";
$index = array_search($delete, $array);
array_splice($array, $index, 1);
var_dump($array);
?>
0
répondu Onome Mine Adams 2017-10-14 16:26:38

utilisant array_seach() , essayez ce qui suit:

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

array_search() renvoie la clé de l'élément qu'il trouve, qui peut être utilisée pour supprimer cet élément du tableau original en utilisant unset() . Il retournera FALSE en cas d'échec, mais il peut retourner une valeur "falsey" sur le succès (votre clé peut être 0 par exemple), c'est pourquoi la comparaison stricte !== opérateur est utilisé.

L'instruction if() vérifiera si array_search() a retourné une valeur, et n'effectuera une action que si elle l'a fait.

-1
répondu Ravinder Singh 2013-01-13 11:12:49
unset($array[array_search('strawberry', $array)]);
-1
répondu max li 2013-05-15 06:43:15

$delete = "fraise";

$index = array_search($supprimer, $array);

array_splice ($array, $ index, 1);

-1
répondu Onome Mine Adams 2017-10-14 16:14:56
$detils = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
     function remove_embpty($values)
     {
        if($values=='orange')
        {
            $values='any name';
        }
        return $values;
     }
     $detils=array_map('remove_embpty',$detils);
    print_r($detils);
-2
répondu user3296940 2014-02-11 11:44:20