2011-10-23 113 views
0

我有一個數組數組,如下所示。這個數組包含3個數組,每個數組都有18個元素。如果數組中的所有18個元素與任何其他數組中的18個元素相同,我想刪除整個父數組([0],[1],[2]),但[transaction_id]和[日期]。所以剩餘的16個元素必須是相同的才能將數組視爲重複數組,並將父數組從數組中移除。從多維數組中刪除父元素如果數組中的某些元素相等

任何幫助,將不勝感激。我已經通過這個網站進行了搜索,但在這個特定問題上找不到問題。

[0] => Array 
    (
     [transaction_id] => 3474 
     [date] => 2011-09-20 
     [location] => Kansas City 
     [year] => 2005 
     [year_diff] => 0 
     [make] => Ford 
     [make_id] => 19 
     [model] => F150 Sc Cab 
     [model_id] => 478 
     [subseries] => Lariat 
     [color] => Dk Grn 
     [doors] => X 
     [cylinders] => 8 
     [radio] => CD 
     [odometer] => 78029 
     [odometer_difference] => -4971 
     [odometer_difference_abs] => 4971 
     [price] => 9400 
    ) 

[1] => Array 
    (
     [transaction_id] => 1843 
     [date] => 2011-09-21 
     [location] => Kansas City 
     [year] => 2005 
     [year_diff] => 0 
     [make] => Ford 
     [make_id] => 19 
     [model] => F150 Sc Cab 
     [model_id] => 478 
     [subseries] => Lariat 
     [color] => Dk Grn 
     [doors] => X 
     [cylinders] => 8 
     [radio] => CD 
     [odometer] => 78029 
     [odometer_difference] => -4971 
     [odometer_difference_abs] => 4971 
     [price] => 9400 
    ) 

[2] => Array 
    (
     [transaction_id] => 7778 
     [date] => 2011-10-05 
     [location] => Kansas City 
     [year] => 2005 
     [year_diff] => 0 
     [make] => Ford 
     [make_id] => 19 
     [model] => F150 Crew Cab 
     [model_id] => 19 
     [subseries] => XLT 
     [color] => Blue 
     [doors] => C 
     [cylinders] => 8 
     [radio] => CD 
     [odometer] => 89887 
     [odometer_difference] => 6887 
     [odometer_difference_abs] => 6887 
     [price] => 15100 
    ) 

回答

0

我不打算在這裏寫的整體解決方案,因爲你還沒有與任何代碼開始,但這裏是我會怎麼開始:

我會建議寫一個比較函數對於簡單的數組function compare_arr(arr1, arr2, ignore_keys) { ... },您可以針對多維數組的更具體的比較函數調用每個子數組中的每個子數組。

循環遍歷鍵值對(foreach?)並檢查當前鍵是否在數組ignore_keys中,那麼您可以忽略此元素,否則可以將值標記爲重複值。 如果值不匹配,您可以放棄此比較。

我認爲數組過濾功能並沒有在這裏一路幫助。

+0

我沒有開始任何代碼,因爲坦率地說,我不知道如何開始這個問題。我很驚訝這個問題以前沒有發佈過。 –

+0

@ GabrielMurphy Rodneyrehm的解決方案更簡單,效率也更高。試試他的解決方案 – Smamatti

1

您是否知道您可以使用==來比較陣列?

<?php 

$a = array('a' => 'alpha', 'b' => 'bravo'); 
$b = array('a' => 'alpha', 'b' => 'bravo'); 
$c = array('a' => 'alpha', 'c' => 'charlie'); 
$d = array('c' => 'charlie', 'a' => 'alpha'); 

var_dump(
    $a == $b, // true 
    $a === $b, // true 
    $a != $c, // true (different keys/values) 
    $c == $d, // true 
    $c !== $d // true (no identity! - different order of keys) 
); 

考慮到這一點應該是很簡單的

  1. 刪除TRANSACTION_ID,日期未設置()(從原始或陰影)
  2. 比較三者產生的陣列相互
  3. 重新插入TRANSACTION_ID,日期(如果你沒有你的影子原始數據)

你可以也

  1. 數組複製到陰影
  2. 刪除TRANSACTION_ID和日期
  3. 排序與ksort
  4. 連載()得到一個字符串
  5. SHA1()來獲取數組的哈希
  6. 比較哈希