1. ホーム
  2. php

[解決済み] PHPの配列が連想配列か順次配列かを確認する方法は?

2022-03-23 20:20:34

質問

PHP はすべての配列を連想配列として扱うので、組み込みの関数はありません。配列が数値キーだけを含むかどうかをチェックするための、効率的な方法をどなたか教えていただけませんか?

基本的には、これを区別できるようにしたいのです。

$sequentialArray = [
    'apple', 'orange', 'tomato', 'carrot'
];

とこれを

$assocArray = [
    'fruit1' => 'apple',
    'fruit2' => 'orange',
    'veg1' => 'tomato',
    'veg2' => 'carrot'
];

解決方法は?

あなたは、全く同等ではない2つの質問をしました。

  • まず、配列が数値キーしか持たないかどうかを判断する方法ですが
  • 第二に、配列が シーケンシャル 0から始まる数値キー

これらの動作のうち、実際に必要なのはどちらか考えてみてください。(あなたの目的にはどちらかで十分かもしれません)。

最初の質問(すべてのキーが数字であることを単純にチェックする)は キャプテンKUROがうまく答えてくれました .

2問目(配列がゼロインデックスでシーケンシャルかどうかのチェック)については、以下の関数を使えばよいでしょう。

function isAssoc(array $arr)
{
    if (array() === $arr) return false;
    return array_keys($arr) !== range(0, count($arr) - 1);
}

var_dump(isAssoc(['a', 'b', 'c'])); // false
var_dump(isAssoc(["0" => 'a', "1" => 'b', "2" => 'c'])); // false
var_dump(isAssoc(["1" => 'a', "0" => 'b', "2" => 'c'])); // true
var_dump(isAssoc(["a" => 'a', "b" => 'b', "c" => 'c'])); // true