我的猜测是您在最后一个/单个项目上遇到问题,因为您正在从文件中读取该行,例如通过 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() 以防用户名在列表中出现多次。