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.
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]);
}
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.
if (in_array('strawberry', $array))
{
unset($array[array_search('strawberry',$array)]);
}
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.
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';
});
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]);
}
Sera comme ça:
function rmv_val($var)
{
return(!($var == 'strawberry'));
}
$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$array_res = array_filter($array, "rmv_val");
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.
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.
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
J'espère que ça va aider
$remove= "strawberry";
$array = ["Apple", "orange", "strawberry", "blueberry", "kiwi"];
foreach ($array as $key => $value) {
if ($value!=$remove) {
echo $value.'<br/>';
continue;
}
}
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. :)
Juste vous pouvez faire une seule ligne .il sera supprimer un élément du tableau
$array=array_diff($array,['strawberry']);
<?php
$array = array("Apple", "orange", "strawberry", "blueberry", "kiwi");
$delete = "strawberry";
$index = array_search($delete, $array);
array_splice($array, $index, 1);
var_dump($array);
?>
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.
<?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);
?>