2011-10-23 73 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. 比较哈希