从包含逗号分隔字符串的结果集中分割、展平和删除重复值

问题描述 投票:0回答:4

表示查询结果集的相关部分的最小样本数组:

[
    ['keyw' => 'sam , ram,shyam'],
    ['keyw' => 'sam,ram,shyam, mohan'],
    ['keyw' => 'sam, ram, shyam ,mohan,salman,babu , karan'],
]

我想删除重复的名称以获得类似的输出

[
    sam,
    ram,
    shyam,
    mohan,
    salman,
    babu,
    karan
]

我怎样才能实现这个目标?

<?php
include 'config.php';
$db = new Database();
$db->select('post','*',null,null,'id',20);
$result = $db->getResult();
if (count($result) > 0) {
    foreach ($result as $row) { 
        $string = $row['keyw'];
        $string = $string;
        $array = explode(',', $string);
        print_r(array_merge($array)); 
    }
}
?>
php csv split duplicates resultset
4个回答
0
投票

您可以使用

array_unique
函数删除重复的数组值。 喜欢
$arrayWithUniqueValues = array_unique($OriginalArray);

因为这些看起来像是单独的数组,所以您可以先使用 array_merge 合并它们,例如:

array_merge($array1, $array2)

新数组应该只包含唯一值。


0
投票
<?php
include 'config.php';

$db = new Database();
$db->select('post','*',null,null,'id',20); $result = $db->getResult(); if(count($result) > 0){ 

$newArray  = array();
foreach ($result as $value) {
  $sh_genres = $value['keyw'];
  $sh_genres_array = array_map('trim', explode(',',$sh_genres));
  $newArray = array_merge($newArray , $sh_genres_array );    
}
$newUniqueArray = array_unique($newArray);

foreach($newUniqueArray as $links)  {
echo '<p>'.$links.'</p>';
 }}?>

0
投票

您可以用逗号分割列值,并使用

preg_split()
消耗逗号周围潜在的前导和尾随空格,然后在将数据推入结果数组时翻转值以确保唯一性。 然后,当您想要访问唯一值时,可以使用
array_keys()
将键转换为值。

代码:(演示

$unique = [];
foreach ($db->getResult() as $row) {
    $unique += array_flip(preg_split(
        '/ *, */',
        $row['keyw'],
        0,
        PREG_SPLIT_NO_EMPTY
    ));
}
var_export(array_keys($unique));

0
投票

这就是您一直在寻找的吗?

$splitter = ',';
$array = [];
$result = implode($splitter, array_unique(explode($splitter, $array))));
© www.soinside.com 2019 - 2024. All rights reserved.