2017-01-20 61 views
0

我需要幫助查找數組中的項目以顯示某個項目是否重複或多於2個以顯示結果,並且我一直在尋找這個太長的時間現在我需要您的幫助傢伙。 這是我的陣列項目如何從數組中獲取重複值

Array 
(
    [0] => Array 
     (
      [1] => 1:30am 
      [2] => 2:00am 
      [3] => 3:00am 
     ) 

    [1] => Array 
     (
      [1] => 2:30am 
      [2] => 5:00am 
      [3] => 6:30am 
     ) 

    [2] => Array 
     (
      [1] => 2:00am 
      [2] => 3:00am 
      [3] => 5:00am 
     ) 

) 

,並與array_count_values()嘗試它,它返回

警告:array_count_values():只能算STRING和INTEGER 值!

array_uniquearray_diff_assoc()其返回

注意:數組字符串轉換

請幫幫忙,謝謝

+0

它是一個多維數組,所以你必須妥善處理它!所以你需要找到每一次和適當的計數,我說得對嗎? – Thamilan

+2

你期望的確切回報是多少?計數值或最高發生率的Arrray?請說明你的問題 – Andy

回答

0

只是爲了好玩,在這裏它是在短短的幾行字:

$values = array(
    array('1:30am', '2:00am', '3:00am'), 
    array('2:30am', '5:00am', '6:30am'), 
    array('2:00am', '3:00am', '5:00am') 
); 

$flatten = array(); 
array_walk_recursive($values, function ($item) use (&$flatten) {$flatten[]=$item;}); 
$duplicates = array_keys(array_filter(array_count_values($flatten),function($item){return $item>1;})); 

print_r($duplicates); 

當然,可讀性大約爲零。

主要問題是你必須使用一維數組來使用大部分PHP的數組函數。所以不知何故,你必須首先壓平你的多維數組。

0

試試這個:

$unique = array_unique($array, SORT_REGULAR); 

SORT_REGULAR確保它不會使用字符串比較。

0

你必須在你的數組中循環,然後再循環到你的子數組中。從那裏,你可以建立具有唯一值的數組,數組與重複:

<?php 

$array = array(
    array('1:30 am', '2:00 am', '3:00 am'), 
    array('2:30 am', '5:00 am', '6:30 am'), 
    array('2:00 am', '3:00 am', '5:00 am') 
); 

$unique = $dupes = array(); 
foreach ($array as $subarray) { 
    foreach ($subarray as $value) { 
     if (!in_array($value, $unique)) 
      $unique[] = $value; 
     else 
      $dupes[] = $value; 
    } 
} 

print_r(array_unique($dupes)); // Array ([0] => 2:00 am [1] => 3:00 am [2] => 5:00 am) 
0

因此獲得的每一次計數,您可以創建一個臨時數組,使每一次的字符串作爲數組的關鍵再增加這樣的計數:

$arr = [ 
['1:30am','2:00am','3:00am'], 
['2:30am','5:00am','6:30am'], 
['2:00am','3:00am','5:00am'] 
]; 


$countArr = []; 

array_walk_recursive($arr, function($time) use (&$countArr) { 
    if(array_key_exists($time, $countArr)) // If key exists, increment its value 
     $countArr[$time]++; 
    else          // Otherwise, assign new key 
     $countArr[$time] = 1; 
}); 

print_r($countArr); 

,打印:

Array 
(
    [1:30am] => 1 
    [2:00am] => 2 
    [3:00am] => 2 
    [2:30am] => 1 
    [5:00am] => 2 
    [6:30am] => 1 
) 

Agai N,如果你需要找到的是重複的,

$duplicates = array_filter($countArr, function($value) { 
    if($value>1) 
     return true; 
}); 

print_r($duplicates); 

會打印:

Array 
(
    [2:00am] => 2 
    [3:00am] => 2 
    [5:00am] => 2 
) 

檢查EVAL