Po pierwsze wyciągnij wszystkie zmienne do tablicy
1,4,3,2,3,4,1,2,3,
);
Tutaj inicjujesz sobie początkowe wartości
$same_wartosci = array(); foreach($tablica as $value){
if(!isset($same_wartosci[$value])){ $same_wartosci[$value] = array('min'=>NULL
,'max'=>NULL
); //tu będą zapisane wyniki najmniejszej i największej odległości dla danej wartości }
}
A tu się dzieje cała magia
foreach($same_wartosci as $key=>$value){ //lecimy po tablicy z samymi wartościami
$i = 0;//taki kontroler ile było między
foreach($tablica as $value2){//dla każdej wartości musimy przelecieć całą tablicę z liczbami
if($i!=0){ //czy już trafiliśmy w aktualny klucz
if($value2 != $key){ //czy trafiliśmy na tą samą wartość
$i++; /nie trafiliśmy odległość się zwiększa
}else{ //trafiliśmy trzeba zapisać
$j = $i-1; //
$i = 1;
if( $same_wartosci[$key]['min']>$j || is_null($same_wartosci[$key]['min'])){//czy jest najmniejsza $same_wartosci[$key]['min'] = $j;
}
if($same_wartosci[$key]['max']<$j|| is_null($same_wartosci[$key]['min'])){//czy jest największa $same_wartosci[$key]['max'] = $j;
}
}
}elseif($value2 == $key){//czy jesteśmy na odpowiednim kluczu
$i=1;
}
}
}
przy tym przykładzie wynik:
1 =>
'min' => int 5
'max' => int 5
4 =>
'min' => int 3
'max' => int 3
3 =>
'min' => int 1
'max' => int 3
2 =>
'min' => int 3
'max' => int 3
Oczywiście to nie jest w pełni skończony skrypt, należy jeszcze uwzględnić takie przypadki jak liczba występująca tylko jeden raz