2015-02-23 79 views
0

我想僅通過值以去除從輸入陣列重複user_idPHP - 陣列由值獨特在多維數組

輸入數組:

array (size=3) 
    0 => 
    array (size=3) 
     'user_id' => string '3' (length=1) 
     'rate' => string '0' (length=1) 
     'note' => string 'a' (length=1) 
    1 => 
    array (size=3) 
     'user_id' => string '3' (length=1) 
     'rate' => string '2' (length=1) 
     'note' => string 'b' (length=1) 
    2 => 
    array (size=3) 
     'user_id' => string '4' (length=1) 
     'rate' => string '3' (length=1) 
     'note' => string 'c' (length=1) 

輸出:

array (size=3) 
    0 => 
    array (size=3) 
     'user_id' => string '3' (length=1) 
     'rate' => string '0' (length=1) 
     'note' => string 'a' (length=1) 
    1 => 
    array (size=3) 
     'user_id' => string '4' (length=1) 
     'rate' => string '3' (length=1) 
     'note' => string 'c' (length=1) 

到目前爲止:

$result1 = array_unique($inputArray, SORT_REGULAR); 
$result2 = array_map("unserialize", array_unique(array_map("serialize", $inputArray))); 
+0

的可能重複(http://stackoverflow.com/questions/307674/how-to-remove-duplicate-values-from- [如何從在PHP多維數組中刪除重複的值] a-multi-dimensional-array-in-php) – Rizier123 2015-02-23 10:11:10

+0

@ Rizier123該職位是由整個數組排序,這是隻有價值在數組 – 2015-02-23 10:12:24

+0

@ Rizier123不,這是不是他想刪除重複只有身份證。 – 2015-02-23 10:12:49

回答

2

這應該爲你工作:

<?php 

    $arr = array(
      array(
       'user_id' => '3', 
       'rate' => '0', 
       'note' => 'a' 
      ), 
      array(
       'user_id' => '3', 
       'rate' => '2', 
       'note' => 'b' 
      ), 
      array(
       'user_id' => '4', 
       'rate' => '3', 
       'note' => 'c' 
      ) 
     ); 

    $tmp = array(); 

    foreach($arr as $key => $innerArray) { 
     if(in_array($innerArray["user_id"], $tmp)) 
      unset($arr[$key]); 
     else 
      $tmp[] = $innerArray["user_id"]; 
    } 

    print_r($arr); 

?> 

編輯:

如果你想要一個更fancyer版本:

$tmp = array(); 
$result = array(); 

$result = array_values(array_filter(array_map(function($innerArray)use(&$tmp){ 
    if(!in_array($innerArray["user_id"], $tmp)) { 
     $tmp[] = $innerArray["user_id"]; 
     return $innerArray; 
    } 
}, $arr))); 

print_r($result); 
+1

未設置不需要,對不對?在其他語言中,如果在循環數組的同時取消設置數組中的某個鍵,可能會發生不良事情。保證行爲在PHP中是正確的? – Sumurai8 2015-02-23 10:22:24

+0

@ Sumurai8在這裏它不會產生任何問題 – Rizier123 2015-02-23 10:23:49

0

試試這個:

$ result = array();

foreach($yourArray as $innerArray) { 
     if(in_array($innerArray["user_id"], $result)){ 
      continue; 
      } 
      $result[] = $innerArray; 
    } 

    print_r($result); 
2

如果你正在運行PHP> = 5.6,則下面的工作:

$data = [ 
    [ 
     'user_id' => '3', 
     'rate' => '0', 
     'note' => 'a', 
    ], 
    [ 
     'user_id' => '3', 
     'rate' => '2', 
     'note' => 'b', 
    ], 
    [ 
     'user_id' => '4', 
     'rate' => '3', 
     'note' => 'c', 
    ], 
]; 

$result = array_filter(
    $data, 
    function ($value, $key) use ($data) { 
     return $key === array_search($value['user_id'], array_column($data,'user_id')); 
    }, 
    ARRAY_FILTER_USE_BOTH 
); 
var_dump($result); 
+0

洛爾剛剛看到它:D哇我瘋了。我用德文打開了手冊(http://php.net/manual/de/function.array-filter.php),並沒有任何有關標誌的內容。然後,我把它改爲英語(http://php.net/manual/en/function.array-filter.php) – Rizier123 2015-02-23 10:34:19

+0

它實際上是對的情況下,整個主機非常有用的,我很高興我上運行5.6我的生產箱 – 2015-02-23 10:35:58

+0

顯示需要多長時間他們不同的翻譯雖然 – 2015-02-23 10:36:34

0

如果user_id只是一個int或字符串,你可以使用它作爲索引,這樣:

$a = [ 
    [ 
     'id' => 1, 
    ], 
    [ 
     'id' => 2, 
    ], 
    [ 
     'id' => 3, 
    ], 
    [ 
     'id' => 1, 
    ], 
]; 

$b = array_reduce($a, function($carry, $item) { 
    $carry[$item['id']] = $item; 
    return $carry; 
}, []); 

var_dump($b); 

// Or more plainly like this: 
$b = []; 
foreach ($a as $val) { 
    $b[$val['id']] = $val; 
} 

var_dump($b); 

// If you want numerical indexes, just do this 
$b = array_values($b);