Viele Kommentatoren in dieser Frage verstehen nicht, wie Arrays in PHP funktionieren. Von der Array-Dokumentation :
Ein Schlüssel kann entweder eine Ganzzahl oder eine Zeichenkette sein. Handelt es sich bei einem Schlüssel um die Standarddarstellung einer ganzen Zahl, wird er als solche interpretiert (d. h. "8" wird als 8 interpretiert, während "08" als "08" interpretiert wird). Fließkommazahlen in key werden auf Ganzzahl abgeschnitten. Die indizierten und assoziativen Array-Typen sind in PHP derselbe Typ, der sowohl Integer- als auch String-Indizes enthalten kann.
Mit anderen Worten, es gibt keinen Array-Schlüssel "8", weil er immer (stillschweigend) in die Ganzzahl 8 umgewandelt wird. Der Versuch, zwischen ganzen Zahlen und numerischen Zeichenfolgen zu unterscheiden, ist also unnötig.
Wenn Sie den effizientesten Weg suchen, um ein Array auf nicht-ganzzahlige Schlüssel zu überprüfen, ohne eine Kopie eines Teils des Arrays (wie array_keys()) oder des gesamten Arrays (wie foreach) zu erstellen:
function keyedNext( &$arr, &$k){
$k = key($arr);
return next($arr);
}
for ($k = key(reset($my_array)); is_int($k); keyedNext($my_array,$k))
$onlyIntKeys = is_null($k);
Dies funktioniert, weil key() NULL zurückgibt, wenn die aktuelle Array-Position ungültig ist und NULL niemals ein gültiger Schlüssel sein kann (wenn Sie versuchen, NULL als Array-Schlüssel zu verwenden, wird es stillschweigend in "" umgewandelt).
526 Stimmen
Es gibt einen Fehler in Ihrem Code: Die Tomate ist eine Frucht.
13 Stimmen
Diese Methode ist mit einigen Vorbehalten verbunden, aber ich mache oft einfach
if (isset($array[0]))
die einfach und schnell ist. Natürlich sollten Sie zunächst sicherstellen, dass das Array nicht leer ist, und Sie sollten einige Kenntnisse über den möglichen Inhalt des Arrays haben, damit die Methode nicht fehlschlägt (wie gemischt numerisch/assoziativ oder nicht-sequentiell).1 Stimmen
@OlleHärstedt Nicht laut US High Court. ;-)
1 Stimmen
@MCEmperor Wiki's eigene Seite über "Tomate" sagt, dass es eine Frucht ist de.wikipedia.org/wiki/Tomate Definitionen ändern sich drastisch, wenn Geld ins Spiel kommt :P Frag einfach Jaffa "cake" danach
16 Stimmen
PHP 8.1 führt dafür eine neue Funktion ein:
array_is_list
: stackoverflow.com/a/69859866/7082164