我有一组语言,如下所示:(这些数据从mysql中提取,存储为:例如,字段值:希腊语、波兰语)
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),但是输出保持不变。
我想是因为逗号。
知道如何才能拥有独特的价值观吗?例如:法语、希腊语、德语、波兰语、意大利语、西班牙语和葡萄牙语?
发布于 2016-05-17 15:18:02
从输入创建一个普通数组
$res = array();
foreach ($array as $item)
$res = array_merge($res, explode(', ', $item)); 然后使用array_unique($res)
发布于 2016-05-17 15:17:53
$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
)发布于 2016-05-17 15:28:48
可能的解决办法:
function getUniqueSubValues($array) {
$result = [];
foreach($array as $element) {
$result += preg_split('/\s*,\s*/', $element);
}
return array_unique($result);
}我正在循环数组中的所有值,并将每个值进一步拆分为子值。
我使用的是preg_split('/\s*,\s*/', ...)而不是explode(',', ...),因为否则,之后的空间将被保留,我们将不得不修剪它。
我将所有子值合并到结果数组中,最后返回该数组的唯一值。
https://stackoverflow.com/questions/37280023
复制相似问题