PHP はすべての配列を連想配列として扱うため、組み込み関数はありません。配列が「リストである」 (0 から始まる数値キーのみを含む) かどうかを確認する効率的な方法を誰かお勧めいただけますか?
基本的に、私はこれを区別できるようにしたいです:
$sequentialArray = [
'apple', 'orange', 'tomato', 'carrot'
];
この:
$assocArray = [
'fruit1' => 'apple',
'fruit2' => 'orange',
'veg1' => 'tomato',
'veg2' => 'carrot'
];
ベストアンサー1
PHP 8.1以降では簡単な答えがあります。配列はリストです()。
レガシー コードの場合は、次の関数を使用できます (function_exists()
移植性を高めるためにラップします)。
if (!function_exists('array_is_list')) {
function array_is_list(array $arr)
{
if ($arr === []) {
return true;
}
return array_keys($arr) === range(0, count($arr) - 1);
}
}
そして、この関数をどの PHP バージョンでも使用できるようになります。
var_dump(array_is_list([])); // true
var_dump(array_is_list(['a', 'b', 'c'])); // true
var_dump(array_is_list(["0" => 'a', "1" => 'b', "2" => 'c'])); // true
var_dump(array_is_list(["1" => 'a', "0" => 'b', "2" => 'c'])); // false
var_dump(array_is_list(["a" => 'a', "b" => 'b', "c" => 'c'])); // false