2017-04-03 16 views
3

Please Help!私はサブ配列の値が重複している配列を検証したい。私は多次元配列を持っています。 product_id値が重複しているサブ配列のキーを返したい例:私の配列では、サブ配列にduplicate product_id = 124があります。それらのキーを返したいと思います。重複した値を持つ多次元配列の戻りキー

[purchase_order_products] => Array 
    (
     [0] => Array 
      (
       [product_id] => 124 
       [barcode] => 480001407081 
       [item_code] => 
       [name] => Brew Kettle Can 330mL 
       [qty] => 
       [unit] => 2 
       [pcs_have] => 1 
       [total_pcs] => 1 
       [cost] => 34.83 
       [total_item_price] => 34.83 
       [stocks] => 
       [po_qty] => 
      ) 

     [1] => Array 
      (
       [product_id] => 125 
       [barcode] => 480001416108 
       [item_code] => 
       [name] => Colt 45 Can 330mL 
       [qty] => 
       [unit] => 2 
       [pcs_have] => 1 
       [total_pcs] => 1 
       [cost] => 29.58 
       [total_item_price] => 29.58 
       [stocks] => 
       [po_qty] => 
      ) 

     [2] => Array 
      (
       [product_id] => 124 
       [barcode] => 480001407081 
       [item_code] => 
       [name] => Brew Kettle Can 330mL 
       [qty] => 
       [unit] => 2 
       [pcs_have] => 1 
       [total_pcs] => 1 
       [cost] => 34.83 
       [total_item_price] => 34.83 
       [stocks] => 
       [po_qty] => 
      ) 
) 

私が欲しいの出力は次のようになります。

Array(0,2) 
+1

素敵な、今いくつかのコードを書いてみてください。 – nogad

+0

私は自分の答えを更新しました。今度は、複数のペアの重複に対して求められる正確な出力が得られます。あなたはそれを見て、それがあなたの問題を解決するかどうかを見ますか? – glaux

答えて

1

編集:私は答えにかなり更新しました。
編集2:今、重複

$products = [ 
    0 => ['product-id' => 124], 
    1 => ['product-id' => 125], 
    2 => ['product-id' => 124], 
    3 => ['product-id' => 126], 
    4 => ['product-id' => 126], 
    8 => ['product-id' => 124], 
]; 

// Find the duplicates 
$product_ids = array_column($products, 'product-id'); 
$count = array_count_values($product_ids); 
$duplicates = array_filter($count, function($var) { 
    return $var > 1; 
}); 

// List all the entries with duplicate ids: 
foreach (array_flip($duplicates) as $product_id) { 
    $filter = array_filter($products, function($var) use ($product_id) { 
    return ($var['product-id'] === $product_id); 
    }); 
    print_r('Product-id: ' . $product_id . ' is duplicated in entries: '); 
    print_r(array_keys($filter)); 
} 

に出力を見つけるために、配列関数に建てられた利用:

// Product-id: 124 is duplicated in entries: Array 
// (
//  [0] => 0 
//  [1] => 2 
//  [2] => 8 
//) 
// Product-id: 126 is duplicated in entries: Array 
// (
//  [0] => 3 
//  [1] => 4 
//) 
0

は、重複プロダクトIDのキーを取得するには、このコードを使用します。

$products = $array['purchase_order_products']; 

$duplicate_products_keys = array(); 
$products_ids = array(); 

foreach($products as $key => $product) { 
    if(in_array($product['product_id'], $products_ids)) { 
     $duplicate_products_keys[] = $key; 
    } 
    $products_ids[$product['product_id']] = $product['product_id']; 
} 

prinr_r($duplicate_products_keys); 
関連する問題