Tach!
Viel zu aufwendig bei der geringen Datenmenge. Einfach durchlaufen und den Schlüssel mit dem Anfang der Telefonnummer vergleichen.
Das sind dann aber ~1300 Vergleiche statt 30. Das macht sich im Zweifelsfall schon bemerkbar.
Und? Da zuckt doch die CPU nicht mal mit der Wimper.
$nummer = "081547112342";
$liste = [];
for ($i = 0; $i < 5300; $i++) {
$liste["01" . $i] = "dummy";
}
echo microtime(1), "\n";
foreach ($liste as $vorwahl => $ort) {
if (substr($nummer, $vorwahl) === 0)) {
echo "gefunden\n";
}
}
echo microtime(1), "\n";
Die $nummer ist nicht in der Vorwahl-$liste enthalten, sie wird also vollständig durchlaufen. Selbst wenn du auf 530000 Vorwahlen erhöhst, wirst du keine Verzögerung merken.
dedlfix.