2014-07-01 75 views
-2

所以假设我有这个五元素的数组。我需要找到那些经常重复并按顺序排列的人。查找数组中相同元素的最大序列

$array = array('one','five','five','five','four'); 

的预期结果是:five,因为它是相等的元素的最大序列。我如何找到这些元素或者比较它们的值,以便我能够确定哪些元素是重复的?

foreach ($array as $element) { #find repeating elements } 
+0

[你尝试过什么?](HTTP:// mattgemmell .com/what-you-you-tried /) – kero

+0

我不知道wh在试图啊?这就是我问的原因。保持downvoting。 – Sacred

+1

你知道你想要什么:最长的序列。那么为什么不获得每个序列,然后比较它们的长度?不知道如何?有创意!相信我,如果你想学习如何解决这个问题,你需要付出努力。如果你想解决它,雇用一个人。另外试着看看我的观点:对我来说,看起来你在<1min内输入了这个问题,而没有其他。如果你不愿意这样做,为什么我应该浪费时间? – kero

回答

0

试试这个方法。我认为它会满足你的需求!

$array = array('one','five','five','five','four'); 
$counts = array_count_values($array); 
$max = 0; $key = ''; 
foreach($counts as $k=>$v){ 
    if($v > $max) 
    { 
     $max = $v; 
     $key = $k; 
    } 
} 
echo $key; 
0

有点像一个蛮横的方法。有点像kingkero引用。例如:

$array = array('one','one','one','five','five','five','five','five','four','four', 'one','four'); 
$prev = ''; 
$sequences = array(); 

// group them 
foreach($array as $value) { 
    if(!isset($sequences[$value])) { 
     $sequences[$value][] = 0; 
     $prev = $value; 
    } 

    if($prev == $value) { 
     $val = array_pop($sequences[$value]) + 1; 
     $sequences[$value][] = $val; 
    } else { 
     $prev = $value; 
     $sequences[$value][] = 1; 
    } 

} 

序列将是这样的:

Array 
(
    [one] => Array 
     (
      [0] => 3 
      [1] => 1 
     ) 

    [five] => Array 
     (
      [0] => 5 
     ) 

    [four] => Array 
     (
      [0] => 2 
      [1] => 1 
     ) 

) 

// identify 
$data['key_with_the_most'] = ''; 
$data['consecutive_pattern'] = 0; 
foreach($sequences as $key => $value) { 
    if(max($value) > $data['consecutive_pattern']) { 
     $data['consecutive_pattern'] = max($value); 
     $data['key_with_the_most'] = $key; 
    } 
} 

echo '<pre>'; 
print_r($data); 

$data输出到:

Array 
(
    [key_with_the_most] => five 
    [consecutive_pattern] => 5 
) 
相关问题