Ist es möglich, bei Verwendung der in_array
Funktion einen Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen ?
Also mit einem Quell-Array wie diesem:
$a= array(
'one',
'two',
'three',
'four'
);
Die folgenden Suchvorgänge würden alle true zurückgeben:
in_array('one', $a);
in_array('two', $a);
in_array('ONE', $a);
in_array('fOUr', $a);
Welche Funktion oder Funktionsgruppe würde dasselbe tun? Ich glaube nicht, dass er das in_array
kann.
count(preg_grep('/^'.preg_quote($needle).'/$',$a)>0)
. Also nicht so elegant. (Beachten Sie, dass die Zeichen ^ und $ erforderlich sind, es sei denn, eine teilweise Übereinstimmung ist erwünscht.) Wenn Sie jedoch tatsächlich möchten, dass die übereinstimmenden Einträge zurückgegeben werden, gefällt mir diese Lösung.Es liegt auf der Hand, den Suchbegriff in Kleinbuchstaben umzuwandeln:
Wenn das Array Großbuchstaben enthält, müssen Sie dies natürlich zuerst tun:
und suche das. Es macht keinen Sinn,
strtolower
bei jeder Suche das gesamte Array zu bearbeiten.Das Durchsuchen von Arrays ist jedoch linear. Wenn Sie ein großes Array haben oder dies häufig tun, ist es besser, die Suchbegriffe in den Schlüssel des Arrays einzugeben, da dies einen viel schnelleren Zugriff ermöglicht:
dann
Das einzige Problem hierbei ist, dass Array-Schlüssel eindeutig sein müssen. Wenn Sie also eine Kollision haben (z. B. "Eins" und "Eins"), verlieren Sie alle bis auf einen.
quelle
Aus der Dokumentation
quelle
>
zu jeder Zeile verwendet habe, funktioniert es. Ich bin es einfach gewohnt, das manuell>
in die erste Zeile zu setzen.>
am Anfang jeder Zeile einfügen.Quelle: php.net in_array Handbuchseite.
quelle
Angenommen, Sie möchten das in_array verwenden. Hier erfahren Sie, wie Sie die Groß- und Kleinschreibung nicht berücksichtigen können.
Groß- und Kleinschreibung nicht berücksichtigen in_array ():
Normale Groß- und Kleinschreibung beachten:
quelle
Das Obige ist richtig, wenn wir annehmen, dass Arrays nur Strings enthalten können, Arrays aber auch andere Arrays. Die Funktion in_array () kann auch ein Array für $ Needle akzeptieren, sodass Strtolower ($ Needle) nicht funktioniert, wenn $ Needle ein Array ist und Array_Map ('Strtolower', $ Haystack) nicht funktioniert, wenn $ Haystack andere enthält Arrays, führt jedoch zu "PHP-Warnung: strtolower () erwartet, dass Parameter 1 Zeichenfolge ist, Array angegeben".
Beispiel:
Also habe ich eine Hilfsklasse mit den relevanten Methoden erstellt, um in_array () zwischen Groß- und Kleinschreibung zu unterscheiden und zwischen Groß- und Kleinschreibung zu unterscheiden. Ich verwende auch mb_strtolower () anstelle von strtolower (), damit andere Codierungen verwendet werden können. Hier ist der Code:
quelle
Ich habe eine einfache Funktion geschrieben, um in einem Array, in dem sich der Code befindet, nach einem unempfindlichen Wert zu suchen.
Funktion:
wie benutzt man:
quelle
quelle
return
. Wenn nur 1 Nadel gefunden werden muss, ist es sinnlos, nach dem Auffinden weiter zu iterieren. Ich würde einen Tippfehler beheben, das $ strict-Konzept einbrennen und einige Verbesserungen vornehmen, vielleicht etwas in der Nähe von 3v4l.org/WCTi2 . Dieser Beitrag ist nicht perfekt, aber sein Herz ist am richtigen Ort.quelle
$ a = Array ('eins', 'zwei', 'drei', 'vier');
$ b = in_array ('ONE', $ a, false);
quelle
true
strenge Typvergleiche verwendet werden, z'1' !== 1
. Wennfalse
Typ Jonglieren verwendet wird, z'1' == 1
. Dokumentation finden Sie unter php.net/in_array und php.net/manual/en/types.comparisons.php .