Удаление любого (первого, среднего, последнего, единственного) элемента в списке CSV с помощью PHP explode / implode - PullRequest
1 голос
/ 26 августа 2010
$pieces = explode(",", $userList);

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

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

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

Ответы [ 3 ]

1 голос
/ 26 августа 2010

My думаю, , что у вас были проблемы с последним / единственным элементом, потому что вы читаете строку из файла, например, через 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 голосов
/ 26 августа 2010

Вот, пожалуйста:

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

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

0 голосов
/ 26 августа 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...