Mit array_values()
ist der Weg zu gehen. Dadurch wird ein neues indiziertes Array in der gleichen Reihenfolge wie das ursprüngliche Array erstellt.
Dann können Sie das für Ihren Wert mit array_search()
suchen, die den numerischen Index zurückgibt. Dann nur +1 für den nächsten und -1 für den vorherigen.
Natürlich möchten Sie vielleicht überprüfen, ob der Wert, nach dem Sie suchen, tatsächlich existiert. Wenn ja, dann stellen Sie sicher, dass auch index+1
und index-1
vorhanden sind, und setzen Sie sie auf null
, wenn dies nicht der Fall ist.
Etwas wie folgt aus:
$my_val = 'blue';
$int_indexes = array_values($my_array); // store all values into integer indexed array
if ($index = array_search($my_val, $int_indexes)) { // don't set prev-next if value not found
$prev = array_key_exists($index - 1, $int_indexes) ? $int_indexes[$index - 1] : null;
$next = array_key_exists($index + 1, $int_indexes) ? $int_indexes[$index + 1] : null;
}
echo "previous: $prev" . '<br>';
echo "this: $my_val" . '<br>';
echo "next: $next";
Gibt Ihnen Ergebnisse:
// previous: green
// this: blue
// next: purple
Und wenn Ihr gesuchter Wert am Anfang oder Ende ist, keine Sorgen, Sie nur einen null
Wert. Und es wird Ihr gesuchter Wert nicht gefunden, keine Sorge, Sie erhalten nur 2 null
Werte.
Ich würde vorschlagen, min und max für die Begrenzung der nächsten und vorherigen Schlüssel und Array_Values, um sicherzustellen, dass das Array immer 0 indiziert ist. – fubar
@Rob Einverstanden, obwohl ich die Antwort auf den Umfang der Frage verlassen habe. Wir werden sehen, worauf er OP zurückkommt – Darren