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

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

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

このコードを作り直して、CSV リストから要素を削除する方法についての情報を探しています。ユーザーはこのシステムに存在する必要があり、システムに最後のユーザーが 1 人いる場合でも正常に機能するはずです (したがって、コマンドは存在しません)。

4

3 に答える 3

1

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使用しました。

于 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 に答える