2013-03-29 97 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] => 
     ) 

)