2016-10-21 83 views
1

我有一個包含一些索引的數組,我想獲取公共元素。 陣列如何在php中獲取數組中的公共元素

Array 
(
    [0] => Array 
    (
     [0] => Array 
      (
       [Code] => A 
       [Price] => 2333 
       [Item] => [Item_0_1] 
      ) 

     [1] => Array 
      (
       [Code] => C 
       [Price] => 2000 
       [Item] => [Item_0_2] 
      ) 

     [2] => Array 
      (
       [Code] => F 
       [Price] => 655 
       [Item] => [Item_0_3] 
      ) 
    ) 

    [1] => Array 
    (
     [0] => Array 
      (
       [Code] => C 
       [Price] => 7632 
       [Item] => [Item_1_1] 
      ) 

     [1] => Array 
      (
       [Code] => D 
       [Price] => 2334 
       [Item] => [Item_1_2] 
      ) 
    ) 
) 

因此,我必須做按照上述陣列有兩個嵌套的索引[0][1],也可以是更大。 ,所以我有一個基於從兩個指數陣列碼,你可以看到有隻有一個共同的元素,它[Code] => C是獲得共同的因素,所以我必須得從兩個數組,但常見的數組這個元素會喜歡

[Code] => A // that will be same 
[Price] => 9632 // [0]...[Price]+[1]...[Price] 
[Item] => [item_0_3,item_1_2] // this will push in array 

輸出,我想喜歡這個

Array 
(
    [0] => Array 
     (
      [Code] => C 
      [Price] => 9632 
      [Item] => [item_0_3,item_1_2] 
     ) 
) 

因此如何使新的陣列與普通陣列我已經嘗試foreach, array merge多,但沒有我沒有能夠做出邏輯。

回答

1

您可以使用array_merge_recursive(),它會是這個樣子:

$merged_array = array_merge_recursive($array1, $array2); 

得到類似的結果:

array(2) { 
    [0]=> array(1) { 
     [0]=> array(3) { 
      ["Code"]=> string(1) "A" 
      ["Price"]=> string(4) "2333" 
      ["Item"]=> string(8) "Item_0_1" 
     } 
    } 
    [1]=> array(1) { 
     [0]=> array(3) { 
      ["Code"]=> string(1) "A" 
      ["Price"]=> string(6) "121212" 
      ["Item"]=> string(8) "Item_0_3" 
     } 
    } 
} 

然後你可以通過你的陣列循環正常:

for($i = 0; $i <= count($merged_array) -1; $i++) { 
    echo ($merged_array[$i]['Code'] == "A") : $merged_array[$i]['Price'] . ' + ' : ""; 
} 

// Output: 2333 + 121212 

要做到這一點與您的自己的代碼,看看這SO answer

+0

代碼是動態 – User97798

+0

嘛,遞歸的工作原理是匹配相同的密鑰相同的值,所以只要你的數據保持這種持續模式:這將爲你工作。 @ User97798 – KDOT

0

這將幫助你得到你的結果..

$array; //<----- Your input array 

$code_array = array(); 
foreach($array as $key => $row) { 
    if($key == 0) { 
     $code_array = array_column($row,'Code'); 
    } else { 
     $code_array = array_intersect($code_array, array_column($row,'Code')); 
    } 
} 
//You will get common element code in $code_array variable 

$result_array = array(); 
foreach($code_array as $key => $code) { 
    $result_array[$key] = array(
     'Code' => $code, 
     'Price' => 0, 
     'Item' => '' 
    ); 
} 
// Created Result array with unique codes 

foreach($array as $row) { 
    foreach($row as $sub_row) { 
     $key = array_search($sub_row['Code'],$code_array); 
     if($key) { 
      $result_array[$key]['Price'] += $sub_row['Price']; 
      $result_array[$key]['Item'] .= $result_array[$key]['Item'] == '' ? $sub_row['Item'] : ','.$sub_row['Item']; 
     } 
    } 
} 
//Assigned values to result array 
相關問題