0

I am a multidimensional array!このコードを実行すると、 (最初のブロック) の出力が得られます。2ブロック目に入るかと思ったけど入らない。ここで何が欠けていますか?

$values = array('1','2');
if(isset($values[0][0])){
    echo "I am a multidimensional array!";
}else{
    echo "I am not a multidimensional array.";
}
4

3 に答える 3

3
$values = array(1,array(1,2));


$multi = false;
if(is_array($values)){
    foreach($values as $k=>$v){
        if(is_array($v)){
            $multi = true;
            break;
        }
    }
}

echo $multi ? "multi" : "not multi";
于 2013-03-16T23:04:51.173 に答える
3

これを試して:

if(is_array($values[0]))

編集:これは、配列の最初の要素のみをチェックします。各要素をループして、本当に多次元かどうかを確認する必要があります。

このコードは、配列の最初の要素も配列かどうかを確認します。isset変数が であるかどうかをチェックするだけですNULL

issetあなたの例では期待どおりに動作していません。おそらく、PHP のバージョン間またはセットアップ間で機能にわずかな違いがあります。マニュアルには何も表示されませんでしたが、おそらく次のことができます。

http://php.net/manual/en/function.isset.php

usingis_arrayはよりセマンティックであるため、私の意見では、はるかに優れた選択です。

于 2013-03-16T23:00:30.957 に答える
1

このコードは、配列の最初の値が文字列として明示的に宣言されている場合にのみ、if ブランチに入ります。

$values = array('1',2);

–そして、その動作は論理的です。なぜなら、$values[0]そのテキストリテラルは「1」であり、ゼロベースのインデックスを使用してアクセスできる最初の文字があるためです。

したがって、実際のデータは文字列型であるか、PHP バージョンに依存していると思います (5.3.16 でテストしました)。

とにかく、is_arrayすでに提案されている他の回答を使用することは、ここに行く正しい方法です。

于 2013-03-16T23:06:50.993 に答える