64
59

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

配列か連想配列か判定する

Last updated at Posted at 2012-12-26

PHPは連想配列と配列の区別がないので、判別したい場合はこんなコードが必要。

<?php
if (array_values($arr) === $arr) {
  echo '$arrは配列';
} else {
  echo '$arrは連想配列';
}
具体例
<?php
/**
 * 添え字が0から連続する数値(=配列とみなせる)ときにtrue
 */
function is_vector(array $arr) {
  return array_values($arr) === $arr;
}

$arr1 = ['a','b','c'];   //配列
$arr2 = ['a'=>'a', 'b'=>'b']; //添字が文字なので配列とは言えない
$arr3 = ['a', 2=>'b', 1=>'c'];  //添え字の順番がおかしいので配列とは言えない

var_dump(is_vector($arr1)); //true
var_dump(is_vector($arr2)); //false
var_dump(is_vector($arr3)); //false

array_values()は連想配列のキーを数値に振りなおしてくれる関数です。配列の場合はarray_values()を作用させても元のままになりますので、作用前の配列と比較することで判定が可能です。

http://d.hatena.ne.jp/fbis/20091112/1258002754
こちらに書いてあるように素直にforeachでキーを調べていってもいいのですが、配列が単純な場合は、array_valuesを使ったワンライナーでも同等の速度になるようです。

配列の要素数が多い、配列の要素が複雑、などの場合はforeachで調べた方が速くなります。

64
59
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
64
59

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?