Die Umwandlung des gepunkteten Quadrats in einen ganzzahligen Wert ist nur der Anfang einer Lösung.
Sie können Werte in einem Array oder aus einer Datenbank mit einem normalen Index nicht dereferenzieren. Betrachten Sie den Fall, in dem Sie einen Datensatz finden möchten, sagen Sie 125.54.123.8 in Ihren Bereichen. Wenn Ihre Bereiche mit der Startadresse verknüpft sind, können Sie nur Datensätze ausschließen, deren Startadresse größer als Ihr Suchwert ist. Wenn es am Ende des Bereichs eingegeben wird, können Sie nur Werte ausschließen, bei denen die Endadresse kleiner als Ihr Suchwert ist. Sie müssen immer noch ungefähr die Hälfte Ihrer Daten untersuchen, um eine Übereinstimmung zu finden (oder deren Fehlen).
Sie könnten Datenpakete oder verschachtelte Arrays verwenden, aber diese sind etwas kludgy Lösungen.
Eine weitere Verknüpfung ist, wenn Sie eine PHP-Datenstruktur verwenden, um die Bereiche zu verwalten ist die Zeit, die es dauert, den Datensatz zu laden und zu analysieren, bevor Sie mit der Suche beginnen können. Dieser Overhead tritt erfahrungsgemäß mit einem Datensatz von ca. 100-200 Zeilen auf, verglichen mit einem Datensatz von MySQL.
Die Lösung ist MySQL Geospatial-Funktionen abzubilden, die Bereiche in einem eindimensionalen Raum zu verwenden - ich Lookup-mal unter 1ms auf bescheidener Hardware Durchsuchen der gesamte Internet zugewiesenen Bereiche (mit den Datensätzen von RIPE, APNIC usw.) erhalten.
Das beschriebene Verfahren ist here
Hinweis: ip2long() gibt einen signierten 32-Bit-Integer-Wert in PHP, während MySQL INET_ATON,() ohne Vorzeichen ist (dh Sie can'tmix und passen die zwei Funktionen)
postgresql unterstützt einen CIDR & INET Datentypen, nur fyi. Weiß nicht über mysql oder sqlite. – alzee
Ich entfernte die inkompatiblen Datenbank-Tags. Bitte markieren Sie die Frage mit der von Ihnen verwendeten Datenbank oder erklären Sie explizit, warum sie ursprünglich sowohl mit MySQL als auch mit SQLite getaggt wurde. –
Der schnellste Weg wäre eine In-Memory-Lösung (zwischen Prozessen geteilt) mit einer auf diese spezielle Anwendung zugeschnittenen Logik. Wahrscheinlich ein riesiger Overkill (und unnötige Arbeit) für Sie. Seien Sie ehrlich zu Ihren Anforderungen. –