web-dev-qa-db-fra.com

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

Comment puis-je supprimer un élément d'un tableau lorsque je connais le nom de l'élément? par exemple:

J'ai un tableau:

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

l'utilisateur entre strawberry

strawberry est supprimé.

Pour expliquer complètement:

J'ai une base de données qui stocke une liste d'éléments séparés par une virgule. Le code apparaît dans la liste en fonction d'un choix d'utilisateur où ce choix est situé. Ainsi, s'ils choisissent fraise, ils insèrent le code dans chaque entrée où se trouve la fraise, puis la convertit en tableau à l'aide de split (). Je veux les supprimer les éléments choisis par l'utilisateur, pour cet exemple fraise, du tableau.

124
dcp3450

Utilisez array_search pour obtenir la clé et supprimez-la avec unset si trouvé:

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

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:

foreach (array_keys($array, 'strawberry') as $key) {
    unset($array[$key]);
}
247
Gumbo

Utilisez array_diff() pour une solution à une 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 ni de boucle foreach.

115
ills
if (in_array('strawberry', $array)) 
{
    unset($array[array_search('strawberry',$array)]);
}
34
John Conde

Si vous utilisez un tableau simple ici (ce qui semble être le cas), vous devriez plutôt utiliser ce code:

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

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

Supposons que 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 à non défini:

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

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

18
ericluwj

Vous pouvez utiliser le filtre de tableau pour supprimer les éléments selon une condition spécifique sur $v:

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

C'est une simple réitération qui peut supprimer plusieurs valeurs du 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
mmr

Sera comme ça:

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

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

 $array_res = array_filter($array, "rmv_val");
2
D.Martin

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

IMO est la meilleure réponse car elle supprime 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 supprimer autant d’éléments que vous le souhaitez en même temps, si vous le souhaitez.

Clause de non-responsabilité: notez que ma solution génère une nouvelle copie du tableau tout en conservant l’ancienne intacte, contrairement à la réponse acceptée qui mute. Cela pourrait être un peu plus lent à cause de cela.

1
hounded

Une meilleure approche consisterait peut-être à conserver vos valeurs en tant que clés dans un tableau associatif, puis à appeler array_keys() lorsque vous souhaitez créer un tableau. De cette façon, vous n'avez pas besoin d'utiliser array_search pour trouver votre élément.

1
jishi

Cette question a plusieurs réponses, mais je souhaite ajouter quelque chose de plus, car lorsque j'ai utilisé unset ou array_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 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 vous aurez donc accès à 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 si le tableau final ne sont pas réindexés. Vous devez donc ajouter après la 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

Dans le même article: Re-Index Array

 enter image description here

J'espère que ça va aider

1
Jordan Montel
$remove= "strawberry";
$array = ["Apple", "orange", "strawberry", "blueberry", "kiwi"];
foreach ($array as $key => $value) {
        if ($value!=$remove) {
        echo $value.'<br/>';
                continue;
        }
}
0

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 de array_diff. À première vue, il me semblait que la première méthode serait plus rapide, car elle n'exige pas la création d'un tableau supplémentaire (comme avec array_diff). Mais j’ai écrit un petit repère et 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

0

Juste vous pouvez faire une seule ligne .il sera supprimer un élément du tableau


$array=array_diff($array,['strawberry']);


0
dılo sürücü
<?php 
$array = array("Apple", "orange", "strawberry", "blueberry", "kiwi");
$delete = "strawberry";
$index = array_search($delete, $array);
array_splice($array, $index, 1);
var_dump($array);
?>
0
Onome Mine Adamu

Je préférerais utiliser array_key_exists pour rechercher des clés dans des tableaux tels que:

Array([0]=>'A',[1]=>'B',['key'=>'value'])

pour trouver efficacement le spécifié, puisque array_search et in_array () ne fonctionnent pas ici. Et supprimez des éléments avec nset ().

Je pense que cela aidera quelqu'un.

0
ddsultan

Créer un tableau numérique avec supprimer une valeur de tableau particulière

    <?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 référer ce lien ..

0
Sashtha Manik