3

私はこの値を返す2次元配列を持っています:

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

このうち、このように配列を組み合わせて新しい配列を作成する関数を作成できるかどうかを知りたいです:

if たとえば、一般的な単語があり、else do nothing があるため[0] => Array ( [0] => wallet,pen [1] => perfume,pen )、then は等しい必要が あります。[0] => Array ( [0] => wallet,pen, perfume )

また、その後、さらに操作するために各単語を文字列として取得します。


このような配列の値を一意にするにはどうすればよいですか。Array ( [0] => Array ( [0] => wallet [1] => pen [2] => perfume [3] => pen) )ペンが 2 回あるので、この方法で削除してほしい( [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 に答える