2017-10-09 1 views
0

下位カテゴリの配列キーを使用して、多次元配列から重複を除外します。キー要素の下で配列の複製をフィルタリングする

私はarray_diff_key($selectedOffers, $myProducts)を使用しましたそれらをフィルタリングするために必要な

// $selectedOffers 
    Array 
    (
     [Category1] => Array 
     (
      [2424] => Array 
      (
       [node_name] => Name2424 
      ) 
      [2525] => Array 
      (
       [node_name] => Name2525 
      ) 
     ) 
     [Category2] => Array 
     (
      [2121] => Array 
      (
       [node_name] => Name2121 
      ) 
      [2222] => Array 
      (
       [node_name] => Name2222 
      ) 
     ) 
    ) 

// $myProducts  
    Array 
    (
     [Category1] => Array 
     (
      [2323] => Array 
      (
       [node_name] => Name2323 
      ) 
      [2525] => Array 
      (
       [node_name] => Name2525 
      ) 
     ) 
    ) 

をアレイに持っています。問題は、アンダーエレメントではなくカテゴリ別にフィルタリングすることです。したがって、$ selectedOffers配列と$ myProducts配列に同じカテゴリがあり、異なる値がある場合は、同じカテゴリを表示します。

私はトラフのカテゴリを分類し、新しい配列を作成すると考えていましたが、これを行う簡単な方法があるかどうか疑問に思っていました。

ご意見やご協力をいただければ幸いです。

ありがとうございます!

答えて

1
<?php 


$data = 
[ 
    [ 
     1 => [], 
     2 => [] 
    ], 
    [ 
     3 => [], 
     4 => [] 
    ] 
]; 

$mine = 
[ 
    [ 
     2 => [] 
    ], 
    [ 
     3 => [], 
     5 => [] 
    ] 
]; 


$ids = []; 
foreach($mine as $outer) 
    foreach($outer as $k => $v) 
     $ids[] = $k; 

$filter = function($k) use ($ids) { 
    return false === array_search($k, $ids); 
}; 

$filtered = array_map(function($v) use ($filter) { 
    return array_filter($v, $filter, ARRAY_FILTER_USE_KEY); 
}, $data); 

var_export($filtered); 

出力:PHP 5.5の場合

array (
0 => 
array (
    1 => 
    array (
    ), 
), 
1 => 
array (
    4 => 
    array (
    ), 
), 
) 

(あなたがarray_filterを使用してスキップすることができているかのように見える):

$ids  = array_flip($ids); 
$filtered = array_map(function($v) use ($ids) { 
    return array_diff_key($v, $ids); 
}, $data); 
+0

私はすでに答えを受け入れたが、知っているのいずれかの方法がありますPHP 5.5でこれをやっている?方法で非常にうまく書かれたコード:) – Giedrius

+1

array_filterの代わりに、期待どおりに動作するかどうかを確認してください。 – Progrock

+0

ありがとう、ちょっと話題の質問です、どうすればこういうコードを書くのですか?) – Giedrius

関連する問題