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

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

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

我在尋找如何重寫此代碼以從CSV列表中刪除元素的輸入。用戶應該存在於這個系統中,即使系統中有最後一個用戶(因此不存在任何命令),它也應該可以正常工作。通過PHP的explode/implode刪除CSV列表中的任何(第一,中間,最後一個)項目

+0

你知道,PHP有一個[內置的csv解析器](http://php.net/manual/en/function.fgetcsv.php)。可能更好地使用,通過使用'explode' – troelskn 2010-08-26 08:20:14

+0

對不起 - 傢伙 - 修改了標題,使更多的意義......我遇到了問題,當它是列表上的「最後」(==只)項目,我看到刪除那... – tzmatt7447 2010-08-26 08:47:21

回答

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 2010-08-26 09:20:15

+0

...不要貶低你的努力Volker! – tzmatt7447 2010-08-26 09:20:59

0

我沒有發現代碼如此糟糕。但你可以使用例如:

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

但心不是更好然後你...

-1

在這裏你去:

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

但即使這樣問你的問題,你的實現似乎解決「我需要從CSV中刪除特定用戶」,而不是「我需要刪除CSV中的最後一項」,那麼實際問題是什麼?

+0

爲什麼downvote? – 2010-08-26 08:22:46

+0

當操作員想要搜索列表中的特定項目時,它總是刪除第一個項目。 – VolkerK 2010-08-26 08:27:19

+0

這總是刪除最後一個項目。問題是「通過PHP的explode/implode刪除CSV列表中的最後一項」 – 2010-08-26 08:28:47

相關問題