Hej znacie może jakiś prosty sposób czy tablica jest indeksowana numerycznie czy jest hashem? Teraz robię to tak: array_keys() i sprawdzamn czy wszystkie klucze są sekwencyjne i zaczynają się od 0. Dla dużych tablic nie jest to raczej zbyt wydajne rozwiązanie. pozdrawiam emil
Użytkownik Emil napisał:
Rozumiem, że przez "indeksowanie numeryczne" masz na myśli indeksowanie tablic analogiczne do tego w języku C.
PHP nie rozróżnia tablic indeksowanych numerycznie i asocjacyjnych.
$t = array( 0 => 'a', 100 => 'b', 2 => 'c' );
var_dump($t);
da w wyniku
array(3) { [0]=> string(1) "a" [100]=> string(1) "b" [2]=> string(1) "c" }
Bo PHP trzyma je po prostu w haszu, a przechodzi je w kolejności dodawania (również w foreach()). O ile nie posortujesz.
Proponuję pokombinować. Zakładając, że w $tablica masz swoją tablicę, to np.:
$k = array_keys($tablica); sort($k); $m = array_keys(array_fill(0, count($k), 1)); $wynik = $k === $m;
lub jeśli tablicę masz bardzo dużą i nie chcesz tworzyć kolejnych o tych rozmiarach (niestety z globalami):
$index = 0; $wynik = true; function test($value, $key) { global $index, $wynik; $wynik = $wynik && $index++ === $key; } array_walk($tablica, 'test');
W obu przypadkach masz booleana w $wynik.
Pamiętaj też o tym, że tablicę
$t = array("1" => 'a');
PHP widzi jako
array(1) { [1]=> string(1) "a" }
czyli konwertuje index "1" na 1.
Pozdrawiam.
Tablice indeksowane numerycznie -
pyt
Q