Ti conviene usare il comando ksort con cui l'array che hai viene ordinato per ordine crescente sulle chiavi.

A questo punto ti fai uno scriptino che può essere simile a questo.

Supponiamo ke il tuo array si chiami prova mentre il tuo valore di cui trovare il precedente ed il successivo $tuo_valore.

ksort($prova);

$prec = 0;
$succ = 0;


//Prenediamo il valore immediatamente prima

foreach($prova as $ind->$elem)
{
if ($ind < $tuo_valore) $prec = $elem;
else break; //Siccome l'array è ordinato sulla chiave vuol dire che da questo punto in poi tutte le chiavi saranno maggiori di $tuo_valore
}


//Prenediamo il valore immediatamente dopo

foreach($prova as $ind->$elem)
{
if ($ind > $tuo_valore)
{
//Non appena incontriamo il primo valore + grande di $tuo_valore quello è il successivo e, quindi, terminiamo il ciclo

$succ = $elem;
break;
}
}

In base ai valori di $prec e $succ puoi avere le seguenti 4 combinazioni:

$prec = 0 && $succ != 0 c'è solo il successivo;
$prec != 0 && $succ = 0 c'è solo il precedente;
$prec != 0 && $succ != 0 ci sono entrambi;
$prec = 0 && $succ = 0 può accadere solo se l'array è vuoto.

Può nascere un problema se per caso come elemento dell'array prec o succ vi sia proprio il valore ZERO. Se questa possibilità esiste allora dobbiamo fare una piccola modifica:


ksort($prova);

$find_prec = false;
$find_succ = false;


//Prenediamo il valore immediatamente prima

foreach($prova as $ind->$elem)
{
if ($ind < $tuo_valore)
{
$find_prec = true;
$prec = $elem;
}
else break; //Siccome l'array è ordinato sulla chiave vuol dire che da questo punto in poi tutte le chiavi saranno maggiori di $tuo_valore
}


//Prenediamo il valore immediatamente dopo

foreach($prova as $ind->$elem)
{
if ($ind > $tuo_valore)
{
//Non appena incontriamo il primo valore + grande di $tuo_valore quello è il successivo e, quindi, terminiamo il ciclo

$find_succ = true;
$succ = $elem;
break;
}
}


Quindi le 4 combinazioni saranno:

$find_prec = false && $find_succ = true c'è solo il successivo;
$find_prec = true && $find_succ = false c'è solo il precedente;
$prec = true && $succ = true ci sono entrambi;
$prec = fasle && $succ = false può accadere solo se l'array è vuoto.