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.";
}
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.";
}
$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";
これを試して:
if(is_array($values[0]))
編集:これは、配列の最初の要素のみをチェックします。各要素をループして、本当に多次元かどうかを確認する必要があります。
このコードは、配列の最初の要素も配列かどうかを確認します。isset
変数が であるかどうかをチェックするだけですNULL
。
isset
あなたの例では期待どおりに動作していません。おそらく、PHP のバージョン間またはセットアップ間で機能にわずかな違いがあります。マニュアルには何も表示されませんでしたが、おそらく次のことができます。
http://php.net/manual/en/function.isset.php
usingis_array
はよりセマンティックであるため、私の意見では、はるかに優れた選択です。
このコードは、配列の最初の値が文字列として明示的に宣言されている場合にのみ、if ブランチに入ります。
$values = array('1',2);
–そして、その動作は論理的です。なぜなら、$values[0]
そのテキストリテラルは「1」であり、ゼロベースのインデックスを使用してアクセスできる最初の文字があるためです。
したがって、実際のデータは文字列型であるか、PHP バージョンに依存していると思います (5.3.16 でテストしました)。
とにかく、is_array
すでに提案されている他の回答を使用することは、ここに行く正しい方法です。