0

PHPのコンマ区切りリスト内で重複する値を削除するにはどうすればよいですか?

私は顧客アンケートの 2 つのバージョンを持っています.1 つは他のものよりも詳細です.1 つは好きなアイテムを尋ねられ、もう 1 つは好きなアイテムをランク付けして指定するように求められます. この特定の例では、列の 1 つ ('items_like') に、カンマ区切りのリストに複数の値が含まれている場合があります。各列に複数の値がコンマ区切りのリストに含まれるシナリオが他に 2 つあります。

顧客が気に入っているすべてのアイテムのリストを表示するために、データベースから情報を取得するときに 4 つの列を連結しています。結合されたカンマ区切りのリストから重複する値を削除するにはどうすればよいですか? JavascriptよりもPHPでこれを行うことをお勧めします

try {  
$stmt = $conn->prepare("SELECT * FROM customer_info WHERE user_id = :user_id"); 
$stmt->bindValue(':user_id', $user_id); 
$stmt->execute();
}catch(PDOException $e) {echo $e->getMessage();}
$row = $stmt->fetch();
$search = array('_', ',', 'Null');
$replace = array(' ', ', ', '');
$rows = str_replace($search, $replace, $row);

$merged_likes = $rows['items_like']. ",  " . $rows['first_like']. ",  " .     $rows['second_like']. ",  " .  $rows['third_like'];
echo $merged_likes; 
4

1 に答える 1

0

物事のリストを扱うときは、配列を使用するのが最も簡単です。カンマ区切りの文字列は、表示には問題なく機能しますが、コードで操作するのは面白くありません。そのことを念頭に置いて、最終的にデータを画面に表示するまで、カンマに触れないことをお勧めします。

残念ながら、データベースにはすでにカンマ区切りの文字列が保存されているようです。これを変更できる場合は、ユーザーとユーザーが好きなものとの間に1対多の関係を持つ複数のテーブルを使用して、代替のデータベース構造を調べることをお勧めします。これについて言えることはたくさんありますが、それはあなたの質問の主題ではありません。ハブロックがすでに述べたように、基本的な概念はデータベースの正規化と呼ばれます。

データベース構造を変更できず、コンマ区切りのリストを操作する必要がある場合は、コンマ区切りを元に戻して、PHPの配列に戻すだけです。これを行うには、次のexplode()関数を使用します。

$teststring = '1,2,3';
$test = explode(',', $asdfstring); // array(1, 2, 3)

配列を作成すると、PHPには、並べ替えや重複の削除などの便利な機能がいくつかあります。おそらくここで最も興味があるのはですarray_unique()

表示のためにコンマ区切りのリストに戻すには、単にを使用します。これは、配列を取得し、選択した区切り文字(たとえば、コンマ)で結合することとimplode()は逆になります。explode()

ここで扱っている列が複数あり、リストが1つだけ必要なため、複数の手順で配列を作成する必要があります。これらの列のすべてに複数の値を含めることができる場合は、それらすべてに対して展開を実行できます。

$items_like = explode(',', $rows['items_like']);
$first_like = explode(',', $rows['first_like']);
$second_like = explode(',', $rows['second_like']);
$third_like = explode(',', $rows['third_like']);
$merged = array_merge($items_like, $first_like, $second_like, $third_like);

または、1番目、2番目、および3番目に1つのアイテムしか含まれない場合は、次のようにすることができます。

$items_like = explode(',', $rows['items_like']);
$other_likes = array($rows['first_like'], $rows['second_like'], $rows['third_like']);
$merged = array_merge($items_like, $other_likes);

次に、重複を削除します。

$likes = array_unique($merged);

これで、ようやくコンマを追加する準備が整いました。

echo implode(', ', $likes);
于 2013-02-23T21:23:41.443 に答える