2015-04-03 60 views
0

我想從數組中刪除具有重複數字的數字。從重複數字的數組中刪除數字

array('4149','8397','9652','4378','3199','7999','8431','5349','7068'); 

array('8397','9652','4378','8431','5349','7068'); 

我已經試過這件事情

foreach($array as $key => $value) { 
    $data = str_split($value, 1); 
    $check = 0; 
    foreach($data as $row => $element) { 
     $check = substr_count($value, $element); 
     if($check != 1) { 
      array_diff($array, array($value)); 
     } 
    } 
} 
+0

JS或PHP決定或者兩個都選! – Rizier123 2015-04-03 19:29:22

+0

因爲我在使用Laravel而使用PHP會更好 – 2015-04-03 20:23:57

+0

並且您是否嘗試過某些方法來實現您的目標? – Rizier123 2015-04-03 20:24:30

回答

0

可以使用匹配正則表達式過濾數組:

  • (.)任何字符,接着是零個或多個字符
  • \1隨後的第一個字符一個更多的時間
  • .*

示例co德:

$array = array('4149','8397','9652','4378','3199','7999','8431','5349','7068'); 

$result = array_filter(
    $array, 
    function ($number) { 
     return !preg_match('/(.).*\\1/', $number); 
    } 
); 

echo implode(', ', $result), PHP_EOL; 

輸出:

8397, 9652, 4378, 8431, 5349, 7068 
0

這應該爲你工作:

在這裏,我第一次str_split()每個元素與array_map()一個單獨的數組。在此之後,我只是用array_unique()數字將分割數組與相同數組進行比較,並檢查它們是否相同。如果是,我將返回implode()號碼,否則返回false。最後,我只用array_filter()將false過濾掉。

因此,換句話說,我只是比較這兩個陣列,它們是相同的:

陣列1:

Array 
(
    [0] => Array 
     (
      [0] => 4 
      [1] => 1 
      [2] => 4 
      [3] => 9 
     ) 

    //... 

) 

數組2:

Array 
(
    [0] => Array 
     (
      [0] => 4 
      [1] => 1 
      [3] => 9 
     ) 
    //... 

) 

代碼:

<?php 

    $arr = ['4149', '8397', '9652', '4378', '3199', '7999', '8431', '5349', '7068']; 
    $arr = array_map("str_split", $arr); 

    $result = array_filter(array_map(function($v1, $v2){ 
     return ($v1 === $v2?implode("", $v1):false); 
    }, $arr, array_map("array_unique", $arr)));  

    print_r($result); 

?> 

輸出:

Array ([1] => 8397 [2] => 9652 [3] => 4378 [6] => 8431 [7] => 5349 [8] => 7068)