2013-03-29 93 views
2

刪除重複值,我有數組這樣的數組:如何從多維數組

Array 
(
    [userId] => 35 
    [fieldId] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
      [3] => 1 
      [4] => 2 
      [5] => 2 
      [6] => 1 
      [7] => 4 
     ) 

    [educationTitle] => Array 
     (
      [0] => School1 
      [1] => School2 
      [2] => 3 
      [3] => School1 
      [4] => School2 
      [5] => School2 
      [6] => School1 
      [7] => 
     ) 
) 

我想刪除每個陣列的所有副本。所以,我想最終的陣列看起來像這樣:

Array 
(
    [userId] => 35 
    [fieldId] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
      [7] => 4 
     ) 

    [educationTitle] => Array 
     (
      [0] => School1 
      [1] => School2 
      [2] => 3 
      [7] => 
     ) 
) 

我已經試過這(在這個答案https://stackoverflow.com/a/307701/1009116推薦):

function multi_unique($updates) { 
    foreach ($updates as $k=>$na) 
     $new[$k] = serialize($na); 
    $uniq = array_unique($new); 
    foreach($uniq as $k=>$ser) 
     $new1[$k] = unserialize($ser); 
    return ($new1); 
} 

而且它有沒有效果

我也試過了(這裏推薦 - https://stackoverflow.com/a/946300/1009116

$input = array_map("unserialize", array_unique(array_map("serialize", $input))); 

And t他只是返回最後一個數組(但是,它被過濾,因爲它應該是)

我在做什麼錯?

+0

所以哪個數組明確標識的唯一性?它是fieldID數組,educationTitle數組還是兩者?你需要維護數字指數嗎? –

+0

'fieldId'和是的,我需要數字索引 –

回答

3

您可以使用:

$data = array(
     'userId' => 35, 
     'fieldId' => array(
       0 => 1, 
       1 => 2, 
       2 => 3, 
       3 => 1, 
       4 => 2, 
       5 => 2, 
       6 => 1, 
       7 => 4 
     ), 
     'educationTitle' => array(
       0 => 'School1', 
       1 => 'School2', 
       2 => 3, 
       3 => 'School1', 
       4 => 'School2', 
       5 => 'School2', 
       6 => 'School1', 
       7 => NULL 
     ) 
); 

print_r(arrayUnique($data)); 

輸出

Array 
(
    [userId] => 35 
    [fieldId] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
      [7] => 4 
     ) 

    [educationTitle] => Array 
     (
      [0] => School1 
      [1] => School2 
      [2] => 3 
      [7] => 
     ) 

) 

功能使用array_flip()用於

function arrayUnique($array) { 
    $input = array_map("unserialize", array_unique(array_map("serialize", $array))); 
    foreach ($input as $key => $value) { 
     is_array($value) and $input[$key] = arrayUnique($value); 
    } 
    return $input; 
} 
+0

工作完美,謝謝! –

+0

歡迎...隨時 – Baba

3

在這種情況下,您可以使用array_combine();稍後將數據拆分到各自的容器中。

$combined = array_combine($arr['fieldId'], $arr['educationTitle']); 

$arr['fieldId'] = array_keys($combined); 
$arr['educationTitle'] = array_values($combined); 

請注意原始索引在此操作後重新編號。

+0

感謝您的幫助! –

0

另一種方式;

<?php 
    $myArray = array("userID"=>'35', 
    "fieldID" => array(
    "0" => '1',"1" => '2', 
    "2" => '3',"3" => '1', 
    "4" => '2',"5" => '2', 
    "6" => '1',"7" => '4'), 
    "educationTitle"=>array(
    "0"=>'School1',"1"=>'School2', 
    "2"=>'3',"3"=>'School1', 
    "4"=>'School2',"5"=>'School2', 
    "6"=>'School1',"7"=>'',),); 

    print_r($myArray); 

    $myArray['fieldID'] = array_flip($myArray['fieldID']); 
    $myArray['fieldID'] = array_flip($myArray['fieldID']); 
    $myArray['educationTitle'] = array_flip($myArray['educationTitle']); 
    $myArray['educationTitle'] = array_flip($myArray['educationTitle']); 

    print_r($myArray); 
?> 

最終輸出

Array 
(
    [userID] => 35 
    [fieldID] => Array 
     (
      [6] => 1 
      [5] => 2 
      [2] => 3 
      [7] => 4 
     ) 

    [educationTitle] => Array 
     (
      [6] => School1 
      [5] => School2 
      [2] => 3 
      [7] => 
     ) 

)