2012-03-20 98 views
0

我已经得到了当前数组多维数组 - 维护数据的完整性

array 
    161 => 
    array 
     'cat_id' => string '5' (length=1) 
     'temp_id' => string '2' (length=1) 
     'prod_id' => string '44' (length=2) 
    162 => 
    array 
     'cat_id' => string '3' (length=1) 
     'temp_id' => string '2' (length=1) 
     'prod_id' => string '44' (length=2) 
    164 => 
    array 
     'cat_id' => string '2' (length=1) 
     'temp_id' => string '2' (lenth=1) 
     'prod_id' => string '45' (length=2) 

我使用这个功能来删除重复的数组值:

function removeDupes($array) { 
    $temp = array(); 
    foreach ($array as $k => &$v) { 
     if (in_array($v['prod_id'],$temp)) { 
      unset($array[$k]); 
     } 
     $temp[] = $v['prod_id']; 
    } 
    return $array; 
} 

这在删除任何重复的值数组如果prod_id在前一个数组中是重复的。

我想维护产品的完整类别标识列表,此刻,当我取消设置整个关键字=>值对时,这些列表将被删除。

有没有人有任何想法我可以做到这一点?

编辑按评论:

我正在寻找的是这样的结果:

array 
    161 => 
     'cat_id' => array('5','3') 
     'prod_id' => 44 

所以我删除了重复的产品ID,但保持了类别ID的重复数组项。我希望有所帮助。

+0

好一点,我已经更新的问题。谢谢AD7six – 2012-03-20 12:32:01

回答

1

也许是这样的:

$input = array(); // define your array 
$output = array(); // here will be output 
$temp = array(); 
foreach($input as $key => $value) 
{ 
    if (isset($temp[$value['prod_id']])) 
    { 
     $output[$temp[$value['prod_id']]]['cat_id'][] = $value['cat_id']; 
    } 
    else 
    { 
     $output[$key] = array(
      'cat_id' => array($value['cat_id']), 
      'prod_id' => $value['prod_id'] 
     ); 
     $temp[$value['prod_id']] = $key; 
    } 
} 
+0

谢谢,这个作品很棒! – 2012-03-20 13:02:57

0

我想到的第一件事是迭代你的结构,建立一个array_index => prod_id(对于这个例子数组(44 => 161,45 => 164))的帮助结构。您除去第一个,同时将prod_id添加到找到的第一个。