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

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

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

Я ищу информацию о том, как переделать этот код, чтобы удалить элемент из списка CSV. Пользователь должен существовать в этой системе, и он должен работать нормально, даже если в системе есть один последний пользователь (так что никаких команд не будет).Удаление любого (первого, среднего, последнего, единственного) элемента в CSV-списке через PHP-explode/implode

+0

Вы знаете, PHP имеет [встроенный синтаксический анализатор csv] (http://php.net/manual/en/function.fgetcsv.php). Вероятно, лучше использовать это, используя 'explode' – troelskn

+0

Извините, ребята, изменили название, чтобы иметь больше смысла ... Я столкнулся с проблемами, когда это был« окончательный »(только) элемент в списке, и я видел, как удалить что ... – tzmatt7447

ответ

1

Угадай что у вас были проблемы с последним/единственным элементом, потому что вы читаете строку из файла, например. через fgets(), и вы не удаляли прерывание строки с строки. В этом случае вам действительно стоит взглянуть на fgetcsv().
В любом случае, чтобы исправить вашу функцию, примените trim() к входной строке (или ко всем элементам массива после взрыва, если хотите), чтобы удалить пробелы, включая разрывы строк.

<?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); 
} 

печатает

--a,bcd,e-- 
--e-- 
--e-- 
---- 
---- 
--a,b,c-- 

Я использовал array_keys вместо array_search() только в том случае, имя пользователя может оказаться более чем один раз в списке.

+0

Руки вниз победитель! – tzmatt7447

+0

... не унижать ваши усилия Фолькер! – tzmatt7447

0

Я совсем не нахожу код. но вы могли бы использовать, например:

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

но оно не лучше, чем ваш ...

-1

Здесь вы идете:

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

Но даже если это требует ваш вопрос, ваша реализация, кажется, решить «Мне нужно удалить конкретного пользователя из CSV», а не «Мне нужно удалить последний элемент в CSV», какова фактическая проблема?

+0

Почему downvote? –

+0

Это всегда удаляет первый элемент, в то время как оператору требуется выполнить поиск определенного элемента в списке. – VolkerK

+0

Это всегда удаляет последний элемент. Вопрос: «Удаление последнего элемента в списке CSV с помощью взрыва/взрыва PHP« –