2015-02-12 67 views
1

我已經像卸下從2D陣列重複的ID值:PHP

$a = array(
    array('id'=>1, 'value'=>2), 
    array('id'=>2, 'value'=>3), 
    array('id'=>3, 'value'=>4), 
    array('id'=>1, 'value'=>5), 
    array('id'=>5, 'value'=>10), 
    array('id'=>2, 'value'=>6), 

); 

從這個數組我想不具有陣列的重複ID的密鑰看重 例如

$a = array(
    array('id'=>3, 'value'=>4), 
    array('id'=>1, 'value'=>5), 
    array('id'=>5, 'value'=>10), 
    array('id'=>2, 'value'=>6) 
); 

我嘗試了以下,但無法獲得最終結果。

$i=0; 
    foreach ($a as $key=>$value) { 
     // $arr[$i] = $value; 
     foreach ($a as $key1=>$value1) { 
      if(!empty(array_diff($value, $value1))) { 
       if($value['id'] == $value1['id']) { 
        $arr[$i]=$value1; 
       } 
       else { 
        $arr[$i]=$value; 
       } 
      } 
     } 
     $i++; 
    } 

回答

1

這應該爲你工作:

(這裏我只是簡單的走線槽每個innerArray與foreach然後我從innerArray獲得ID並檢查它是否已經是TMP數組中,如果沒有。我把它添加到TMP數組最後我只是簡單地使用array_values(),使指標乾淨,開始與0。array_reverse()是讓整個arrray以正確的順序)

<?php 

    $a = array(
      array('id'=>1, 'value'=>2), 
      array('id'=>2, 'value'=>3), 
      array('id'=>3, 'value'=>4), 
      array('id'=>1, 'value'=>5), 
      array('id'=>5, 'value'=>10), 
      array('id'=>2, 'value'=>6), 
    ); 


    $tmp = array(); 
    foreach(array_reverse($a) as $v) { 
     $id = $v['id']; 
     isset($tmp[$id]) or $tmp[$id] = $v; 
    } 
    $a = array_reverse(array_values($tmp)); 
    print_r($a); 

?> 

輸出:

Array 
(
    [0] => Array 
     (
      [id] => 3 
      [value] => 4 
     ) 

    [1] => Array 
     (
      [id] => 1 
      [value] => 5 
     ) 

    [2] => Array 
     (
      [id] => 5 
      [value] => 10 
     ) 

    [3] => Array 
     (
      [id] => 2 
      [value] => 6 
     ) 

) 
0

我會創建一個數組來存儲唯一的ID值,然後通過迭代檢查它們。如果唯一ID在唯一ID數組中,則將其刪除。

<?php 
$a=array(
    array('id'=>1, 'value'=>2), 
    array('id'=>2, 'value'=>3), 
    array('id'=>3, 'value'=>4), 
    array('id'=>1, 'value'=>5), 
    array('id'=>5, 'value'=>10), 
    array('id'=>2, 'value'=>6), 
); 

$unique_ids = array(); 
foreach($a as $key => $array){ 

    if(in_array($array['id'],$unique_ids)){ 
     unset($a[$key]); 
    }else{ 
     $unique_ids[] = $array['id']; 
    } 

} 

echo '<pre>',print_r($a),'</pre>'; 
+0

看看OP的預期結果,他想要s ID從底部獨特 – Rizier123 2015-02-12 06:42:08

1

試試這個,它工作正常:

<?php 
$a=array(
     array('id'=>1, 'value'=>2), 
     array('id'=>2, 'value'=>3), 
     array('id'=>3, 'value'=>4), 
     array('id'=>1, 'value'=>5), 
     array('id'=>5, 'value'=>10), 
     array('id'=>2, 'value'=>6), 

    ); 
echo 'Input Array'; 
echo '<pre>'; 
print_r($a); /* it is your inout array */ 
echo '</pre>'; 
$storage = array(); 
$result = array(); 
foreach($a as $b){ 

    if(!in_array($b['id'],$storage)){ 
     $storage[] = $b['id']; 
     $result[] = array('id'=>$b['id'],'value'=>$b['value']); 
    } 

} 
echo 'Output Array'; 
echo '<pre>'; 
print_r($result); /* it is your output array */ 
echo '</pre>'; 
?> 
2

只需創建一個ID數組作爲鍵,然後扔掉那些鍵,當你完成:

$result = []; 
foreach ($a as $item) { 
    $result[$item['id']] = $item; 
} 
$result = array_values($result); 

你可以進一步減少到一行:

$result = array_values(array_combine(array_column($a, 'id'), $a)); 
+0

好吧,這很酷,只是覆蓋相同的ID,以便最後保存最後一個重複的ID:D很好 – Rizier123 2015-02-12 06:54:34

+0

@ Rizier123是的,沒有必要讓它更復雜:) – 2015-02-12 06:55:26