Mon suppose que vous avez eu des problèmes avec le dernier/seul élément parce que vous lisez la ligne d'un fichier, par exemple. via fgets() et vous n'avez pas supprimé le saut de ligne final de la chaîne. Dans ce cas, vous devriez jeter un oeil à fgetcsv().
De toute façon, pour corriger votre fonction, appliquez trim() à la chaîne d'entrée (ou à tous les éléments du tableau après l'éclatement si vous le souhaitez) pour supprimer les espaces blancs, y compris les sauts de ligne.
<?php
echo '--', foo('thisone', 'a,bcd,thisone,e'), "--\n";
echo '--', foo('thisone', 'thisone,e'), "--\n";
echo '--', foo('thisone', "e, thisone\n"), "--\n";
echo '--', foo('thisone', 'thisone'), "--\n";
echo '--', foo('thisone', ''), "--\n";
echo '--', foo('thisone', 'a,thisone,b,thisone,c,thisone'), "--\n";
function foo($deleteuser, $userList) {
$pieces = array_map('trim', explode(',', $userList));
foreach(array_keys($pieces, $deleteuser) as $key) {
unset($pieces[$key]);
}
return implode(',', $pieces);
}
impressions
--a,bcd,e--
--e--
--e--
----
----
--a,b,c--
J'ai utilisé array_keys au lieu de array_search() juste au cas où le nom d'utilisateur peut apparaître plus d'une fois dans la liste.
Vous savez, PHP a un [analyseur csv intégré] (http://php.net/manual/fr/function.fgetcsv.php). – troelskn
Désolé les gars - révisé le titre pour avoir plus de sens ... Je suis tombé sur des problèmes quand il était l'élément "final" (== seulement) sur la liste et je ai perdu pour supprimer que ... – tzmatt7447