În limbajul PHP, tipul de date array este o structură hibridă: poate funcționa atât ca o listă indexată secvențial (vector de tip [0, 1, 2]), cât și ca o tabelă hash asociativă (dicționar cu chei de tip șir ['id' => 1, 'nume' => 'Ion']).
Această flexibilitate creează probleme majore la serializarea în format JSON: un tablou indexat numeric dar ale cărui chei nu încep de la 0 sau au goluri (de exemplu, după ștergerea unui element cu unset()) va fi serializat de json_encode() ca un obiect JSON ({}) în loc de un tablou JSON ([]). Funcția array_is_list rezolvă instant această verificare în mod nativ C ultra-rapid.
<?php
declare(strict_types=1);
// 1. Liste valide: cheile pornesc de la 0 și cresc secvențial cu +1
array_is_list([]); // true (tabloul gol este o listă)
array_is_list(['mar', 'para', 'pruna']); // true (chei: 0, 1, 2)
array_is_list([0 => 'A', 1 => 'B']); // true
// 2. Tablouri care NU sunt liste (sunt dicționare / array-uri asociative):
array_is_list(['nume' => 'Ion', 'varsta' => 30]); // false (chei string)
array_is_list([1 => 'A', 2 => 'B']); // false (nu începe de la 0!)
array_is_list([0 => 'A', 2 => 'B']); // false (lipsește cheia 1!)
// 3. Aplicație practică: garantarea serializării corecte JSON
$produse = ['Telefon', 'Laptop', 'Căști'];
unset($produse[1]); // Rămân doar cheile 0 și 2
if (!array_is_list($produse)) {
// Reindexăm cheile pentru a forța formatul de array [] în JSON:
$produse = array_values($produse);
}
echo json_encode($produse); // Output: ["Telefon","Căști"] (array JSON curat)
Complexitate Algoritmică
Funcția array_is_list() funcționează în O(N) în cel mai rău caz, dar se oprește (short-circuit) imediat la prima cheie care nu respectă secvența 0, 1, 2 ... N-1, oferind performanță incomparabil superioară soluțiilor scrise manual în spațiul utilizator (cum era array_keys($arr) === range(0, count($arr) - 1)).