删除数组中具有逗号分隔值

时间:2016-05-17 15:11:56

标签: php

我有一系列看起来像这样的语言: (这个数据是从mysql中提取的,例如存储为:例如字段值:greek,polish)

 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)但输出保持不变。

我认为这是因为逗号。

关于如何拥有独特价值的任何想法? 例如一个:法语,希腊语,德语,波兰语,意大利语,西班牙语和葡萄牙语?

3 个答案:

答案 0 :(得分:2)

$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);
);

您的结果将是:

Array
(
[0] => 
[1] => french
[2] => greek
[3] => german
[4] => polish
[5] => italian
[6] => spanish
[7] => portuguese
)

答案 1 :(得分:2)

从输入

创建一个普通数组
$res = array();
foreach ($array  as $item)
  $res = array_merge($res, explode(', ', $item)); 

然后使用array_unique($res)

答案 2 :(得分:1)

可能的解决方案:

APP

我循环遍历数组中的所有值,并将每个值进一步分成子值。

我使用APP = webapp2.WSGIApplication([ ('/sign', GuestBook), ('/.*', MainHandler), ], debug=True) 代替function getUniqueSubValues($array) { $result = []; foreach($array as $element) { $result += preg_split('/\s*,\s*/', $element); } return array_unique($result); } ,否则preg_split('/\s*,\s*/', ...)之后的空格会被保留,我们将不得不修剪它。

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