PHP 配列が連想配列か連続配列かを確認するにはどうすればいいですか? 質問する

PHP 配列が連想配列か連続配列かを確認するにはどうすればいいですか? 質問する

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

おすすめ記事