我有一个2d数组,它返回给我这些值:
Array (
[0] => Array (
[0] => wallet,pen
[1] => perfume,pen
)
[1] => Array (
[0] => perfume, charger
[1] => pen,book
).
在此之外,我想知道是否有可能创建一个函数,该函数将组合数组以这种方式,并创建一个新的:
如果例如[0] => Array ( [0] => wallet,pen [1] => perfume,pen )
,则应该等于[0] => Array ( [0] => wallet,pen, perfume )
因为有一个常见的词else什么都不做。
然后将每个单词作为字符串检索,以便进一步操作。
如何使这样一个数组的值唯一。Array ( [0] => Array ( [0] => wallet [1] => pen [2] => perfume [3] => pen) )
,因为有笔两次,我希望它被删除以这种方式( [0] => Array ( [0] => wallet [1] => pen [2] => perfume) )
这只是一个映射数组和组合内部数组的问题:
$x = [['wallet,pen', 'perfume,pen'], ['perfume,charger', 'pen,book']];
$r = array_map(function($item) {
return array_unique(call_user_func_array('array_merge', array_map(function($subitem) {
return explode(',', $subitem);
}, $item)));
}, $x);
首先基于逗号分割所有字符串。然后将它们与array_merge()
合并在一起,并使用array_unique()
删除重复项。
参见:call_user_func_array()
, array_map()
试试这个:
$array = Array (Array ( "wallet,pen", "perfume,pen" ), Array ( "perfume, charger", "pen,book" ));
$res = array();
foreach($array as $key=>$val){
$temp = array();
foreach($val as $k=>$v){
foreach(explode(",",$v) as $vl){
$temp[] = $vl;
}
}
if(count(array_unique($temp)) < count($temp)){
$res[$key] = implode(",",array_unique($temp));
}
else{
$res[$key] = $val;
}
}
echo "<pre>";
print_r($res);
输出:Array
(
[0] => wallet,pen,perfume
[1] => Array
(
[0] => perfume, charger
[1] => pen,book
)
)
您可以在将重复的值压入结果数组时通过将标记指定为元素的键来消除重复的值——PHP不允许在数组的同一级别上存在重复的键,因此任何重新遇到的标记都将被覆盖。
您可以使用递归或静态编写循环来完成此任务。
代码(演示):
$result = [];
foreach ($array as $row) {
foreach ($row as $tags) {
foreach (explode(',', $tags) as $tag) {
$result[$tag] = $tag;
}
}
}
var_export(array_values($result));
代码(演示):
$result = [];
array_walk_recursive(
$array,
function($v) use(&$result) {
foreach (explode(',', $v) as $tag) {
$result[$tag] = $tag;
}
}
);
var_export(array_values($result));