3

我有一个二维数组,它返回我这个值:

Array ( 
   [0] => Array ( 
          [0] => wallet,pen 
          [1] => perfume,pen 
   ) 
   [1] => Array ( 
          [0] => perfume, charger 
          [1] => pen,book 
   ).

出于这个原因,我想知道是否有可能创建一个函数以这种方式组合数组,并创建一个新的:

if 例如[0] => Array ( [0] => wallet,pen [1] => perfume,pen )then 应该等于, [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) )

4

2 回答 2

2

这只是映射数组和组合内部数组的问题:

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

于 2013-05-08T13:00:50.500 回答
0

尝试这个 :

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

)
于 2013-03-04T06:51:22.570 回答