2010-08-26 12 views
1
$pieces = explode(",", $userList); 

$key=array_search($deleteuser, $pieces); 
if(FALSE !== $key) 
{ 
    unset($pieces[$key]); 
} 
else 
    return FALSE; 

$userList = implode(",", $pieces); 

Je cherche des suggestions pour retravailler ce code pour supprimer un élément d'une liste CSV. L'utilisateur doit exister dans ce système et il devrait fonctionner correctement même s'il y a un dernier utilisateur dans le système (donc aucune commande n'existe).Suppression d'un élément (premier, moyen, dernier, unique) dans une liste CSV via l'éclatement/implosion de PHP

+0

Vous savez, PHP a un [analyseur csv intégré] (http://php.net/manual/fr/function.fgetcsv.php). – troelskn

+0

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

Répondre

1

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.

+0

Vainqueur gagnant! – tzmatt7447

+0

... pour ne pas rabaisser votre effort Volker! – tzmatt7447

0

Je ne trouve pas le code si mauvais du tout. mais vous pouvez utiliser par exemple:

$newUserList = str_replace(",,",",",str_replace($deleteuser,'',$userList)); 

mais il isnt mieux que le vôtre ...

-1

Ici, vous allez:

$arr = explode(',', $userList); 
array_pop($arr); 
$userList = implode(',', $arr); 

Mais même si cela demande à votre question, votre implémentation semble résoudre "J'ai besoin de supprimer un utilisateur spécifique d'un fichier CSV", pas "Je dois supprimer le dernier élément dans un fichier CSV", quel est le problème réel?

+0

Pourquoi la downvote? –

+0

Cela supprime toujours le premier élément alors que l'opérateur souhaite rechercher un élément spécifique dans la liste. – VolkerK

+0

Cela supprime toujours le dernier élément. La question est "Suppression du dernier élément dans une liste CSV via PHP exploser/imploser" –