1
$pieces = explode(",", $userList);

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

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

我正在寻找有关如何修改此代码以从 CSV 列表中删除元素的输入。该用户应该存在于该系统中,并且即使系统中有最后一个用户,它也应该可以正常工作(因此不存在任何命令)。

4

3 回答 3

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() 以防用户名在列表中出现多次。

于 2010-08-26T09:01:43.637 回答
0

我根本不觉得代码那么糟糕。但你可以使用例如:

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

但它并不比你的好......

于 2010-08-26T08:19:35.997 回答
-1

干得好:

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

但即使这问了你的问题,你的实现似乎解决了“我需要从 CSV 中删除特定用户”,而不是“我需要删除 CSV 中的最后一项”,实际问题是什么?

于 2010-08-26T08:19:37.227 回答