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.
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]);
}
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.
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 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.
$arr = \array_filter($arr, function ($v) { return $v != 'some_value'; }
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]);
}
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.
sera comme ceci:
function rmv_val($var)
{
return(!($var == 'strawberry'));
}
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$array_res = array_filter($array, "rmv_val");
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.
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.
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
j'Espère que ça aidera
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.
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);
?>
$remove= "strawberry";
$array = ["apple", "orange", "strawberry", "blueberry", "kiwi"];
foreach ($array as $key => $value) {
if ($value!=$remove) {
echo $value.'<br/>';
continue;
}
}
<?php
$array = array("apple", "orange", "strawberry", "blueberry", "kiwi");
$delete = "strawberry";
$index = array_search($delete, $array);
array_splice($array, $index, 1);
var_dump($array);
?>
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.
$delete = "fraise";
$index = array_search($supprimer, $array);
array_splice ($array, $ index, 1);
$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);