J'ai un tableau PHP comme suit:
$messages = [312, 401, 1599, 3, ...];
Je souhaite 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à qu'une fois.
Je cherche la fonction la plus simple pour effectuer cette tâche s'il vous plaît.
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é pour supprimer cet élément du tableau d'origine à l'aide de unset()
. Il renverra FALSE
en cas d'échec. Toutefois, il peut renvoyer une valeur false-y en cas de succès (votre clé peut être 0
par exemple), raison pour laquelle l'opérateur de comparaison stricte !==
est utilisé.
L'instruction if()
vérifiera si array_search()
a renvoyé une valeur et n'exécutera une action que si elle le faisait.
Eh bien, la suppression d’un élément d’un tableau se résume essentiellement à 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 le souhaitez en même temps, si vous le souhaitez.
Clause de non-responsabilité: Notez que ma solution produit une nouvelle copie du tableau tout en conservant l’ancienne intacte, contrairement à la réponse acceptée qui mute. Choisissez celui dont vous avez besoin.
Une méthode intéressante consiste à utiliser array_keys()
:
foreach (array_keys($messages, 401, true) as $key) {
unset($messages[$key]);
}
La fonction array_keys()
requiert deux paramètres supplémentaires pour renvoyer uniquement les clés correspondant à une valeur particulière et si un contrôle strict est requis (c'est-à-dire, utiliser === pour la comparaison).
Cela peut également supprimer plusieurs éléments de tableau avec la même valeur (par exemple, [1, 2, 3, 3, 4]
).
Si vous savez que votre tableau ne contiendra qu'un seul élément avec cette valeur, vous pouvez faire
$key = array_search($del_val, $array);
if (false !== $key) {
unset($array[$key]);
}
Si, toutefois, votre valeur peut apparaître plusieurs 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 PHP 5.3 + avec Fermetures
$fields = array_flip($fields);
unset($fields['myvalue']);
$fields = array_flip($fields);
Regardez le 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 cela vous donnera ce tableau:
array('Nice_item', 'another_liked_item')
Le meilleur moyen est array_splice
_array_splice($array, array_search(58, $array ), 1);
_
Reason for Best est ici à l'adresse http://www.programmerinterview.com/index.php/php-questions/how-to-delete-an-element-from-an-ararray-in -php/
Par le code suivant, les valeurs répétitives seront supprimées des $ messages.
$messages = array_diff($messages, array(401));
Ou simplement, de 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 le contrôle total sur votre tableau
function array_remove_by_value($array, $value)
{
return array_values(array_diff($array, array($value)));
}
$array = array(312, 401, 1599, 3);
$newarray = array_remove_by_value($array, 401);
print_r($newarray);
sortie
Array ( [0] => 312 [1] => 1599 [2] => 3 )
Si vous avez PHP 5.3+
, il y a un code d'une ligne:
$array = array_filter($array, function ($i) use ($value) { return $i !== $value; });
tu peux faire:
unset($messages[array_flip($messages)['401']]);
Explication: Supprimez l'élément contenant la clé 401
après avoir retourné le tableau.
Pour supprimer plusieurs valeurs, essayez celui-ci:
while (($key = array_search($del_val, $messages)) !== false)
{
unset($messages[$key]);
}
Emprunte la logique de underscore.JS _.reject et crée deux fonctions (les gens préfèrent les fonctions !!)
array_reject_value: Cette fonction rejette simplement la valeur spécifiée (fonctionne également pour PHP4,5,7)
function array_reject_value(array &$arrayToFilter, $deleteValue) {
$filteredArray = array();
foreach ($arrayToFilter as $key => $value) {
if ($value !== $deleteValue) {
$filteredArray[] = $value;
}
}
return $filteredArray;
}
array_reject: Cette fonction rejette simplement la méthode appelable (fonctionne pour PHP> = 5.3)
function array_reject(array &$arrayToFilter, callable $rejectCallback) {
$filteredArray = array();
foreach ($arrayToFilter as $key => $value) {
if (!$rejectCallback($value, $key)) {
$filteredArray[] = $value;
}
}
return $filteredArray;
}
Donc, dans notre exemple actuel, nous pouvons utiliser les fonctions ci-dessus comme suit:
$messages = [312, 401, 1599, 3, 6];
$messages = array_reject_value($messages, 401);
ou même mieux: (car cela nous donne une meilleure syntaxe à utiliser comme le array_filter un)
$messages = [312, 401, 1599, 3, 6];
$messages = array_reject($messages, function ($value) {
return $value === 401;
});
Ce qui précède peut être utilisé pour des choses plus compliquées, comme par exemple si nous aimerions supprimer toutes les valeurs supérieures ou égales à 401, nous pourrions simplement faire ceci:
$messages = [312, 401, 1599, 3, 6];
$greaterOrEqualThan = 401;
$messages = array_reject($messages, function ($value) use $greaterOrEqualThan {
return $value >= $greaterOrEqualThan;
});
Réponse de Bojangles m'a aidé. Je vous remercie.
Dans mon cas, le tableau peut être associatif ou non, j'ai donc ajouté la fonction suivante
function test($value, $tab) {
if(($key = array_search($value, $tab)) !== false) {
unset($tab[$key]); return true;
} else if (array_key_exists($value, $tab)){
unset($tab[$value]); return true;
} else {
return false; // the $value is not in the array $tab
}
}
Cordialement
code de ligne unique (grâce à array_diff () ), utilisez ce qui suit:
$messages = array_diff($messages, array(401));
Je sais que ce n’est pas efficace du tout mais qu’il est simple, intuitif et facile à lire.
Donc, si quelqu'un recherche une solution peu sophistiquée qui peut être étendue pour fonctionner avec plus de valeurs, ou des conditions plus spécifiques, voici un code simple:
$result = array();
$del_value = 401;
//$del_values = array(... all the values you don`t wont);
foreach($arr as $key =>$value){
if ($value !== $del_value){
$result[$key] = $value;
}
//if(!in_array($value, $del_values)){
// $result[$key] = $value;
//}
//if($this->validete($value)){
// $result[$key] = $value;
//}
}
return $result
Si les valeurs que vous souhaitez supprimer sont ou peuvent figurer dans un tableau. Utilisez la fonction array_diff . Semble fonctionner très bien pour des choses comme ça.
$arrayWithValuesRemoved = array_diff($arrayOfData, $arrayOfValuesToRemove);
Selon votre exigence ", chaque valeur ne peut être présente qu'une seule fois " si vous souhaitez simplement conserver des valeurs uniques dans votre tableau, le array_unique()
pourrait être ce que vous recherchez.
Entrée:
$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);
var_dump($result);
Résultat:
array(2) {
[0] => int(4)
[2] => string(1) "3"
}
La réponse acceptée convertit le tableau en tableau associatif. Par conséquent, si vous souhaitez le conserver sous forme de tableau non associatif avec la réponse acceptée, vous devrez peut-être également utiliser array_values
.
if(($key = array_search($del_val, $messages)) !== false) {
unset($messages[$key]);
$arr = array_values($messages);
}
La référence est ici
Obtenez la clé du tableau avec array_search()
.
Si vous ne connaissez pas sa clé, cela signifie que cela n'a pas d'importance.
Vous pouvez placer la valeur comme clé, cela signifie qu'elle trouvera instantanément la valeur. Mieux que d’utiliser la recherche dans tous les éléments, encore et encore.
$messages=array();
$messages[312] = 312;
$messages[401] = 401;
$messages[1599] = 1599;
$messages[3] = 3;
unset($messages[3]); // no search needed
vous pouvez vous référer à ceci URL : pour la fonction
array-diff-key()
<?php
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
var_dump(array_diff_key($array1, $array2));
?>
Alors la sortie devrait être,
array(2) {
["red"]=>
int(2)
["purple"]=>
int(4)
}
Une ligne utilisant l'opérateur or
:
($key = array_search($del_val, $messages)) !== false or unset($messages[$key]);
Une autre idée pour supprimer une valeur d'un tableau, utilisez array_diff. Si je veux
$my_array = array(1=>"a", "second_value"=>"b", 3=>"c", "d");
$new_array_without_value_c = array_diff($my_array, array("c"));