首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除数组中具有逗号分隔值的重复项。

删除数组中具有逗号分隔值的重复项。
EN

Stack Overflow用户
提问于 2016-05-17 15:11:55
回答 3查看 44关注 0票数 0

我有一组语言,如下所示:(这些数据从mysql中提取,存储为:例如,字段值:希腊语、波兰语)

代码语言:javascript
复制
 Array
(
[0] => 
[1] => french
[2] => french, greek
[3] => german
[4] => greek
[5] => greek, polish
[6] => italian
[7] => spanish
[8] => spanish, italian
[9] => spanish, portuguese
)

我尝试过使用array_unique($languages),但是输出保持不变。

我想是因为逗号。

知道如何才能拥有独特的价值观吗?例如:法语、希腊语、德语、波兰语、意大利语、西班牙语和葡萄牙语?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-17 15:18:02

从输入创建一个普通数组

代码语言:javascript
复制
$res = array();
foreach ($array  as $item)
  $res = array_merge($res, explode(', ', $item)); 

然后使用array_unique($res)

票数 2
EN

Stack Overflow用户

发布于 2016-05-17 15:17:53

代码语言:javascript
复制
$data = array_map(function ($item) {
    // explode values by "," and trim spaces
    return array_map('trim', explode(',', $item));
}, $your_data);

// merge all nested arrays from $data and return unique
return array_unique(
    call_user_func_array('array_merge', $data);
);

你的结果将是:

代码语言:javascript
复制
Array
(
[0] => 
[1] => french
[2] => greek
[3] => german
[4] => polish
[5] => italian
[6] => spanish
[7] => portuguese
)
票数 2
EN

Stack Overflow用户

发布于 2016-05-17 15:28:48

可能的解决办法:

代码语言:javascript
复制
function getUniqueSubValues($array) {
    $result = [];
    foreach($array as $element) {
        $result += preg_split('/\s*,\s*/', $element);
    }
    return array_unique($result);
}

我正在循环数组中的所有值,并将每个值进一步拆分为子值。

我使用的是preg_split('/\s*,\s*/', ...)而不是explode(',', ...),因为否则,之后的空间将被保留,我们将不得不修剪它。

我将所有子值合并到结果数组中,最后返回该数组的唯一值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37280023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档