fgets () などを介してファイルから行を読み取っていて、文字列から末尾の改行を削除しなかったため、最後の/単一の項目に問題があったと思います。その場合、本当にfgetcsv()を見てください。
とにかく、関数を修正するには、トリム()を入力文字列(または必要に応じて分解後のすべての配列要素)に適用して、改行を含む空白を削除します。
<?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_search() の代わりに array_keysを使用しました。