2012-03-20 99 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添加到找到的第一個。