2012年4月3日火曜日

[PHP] 連想配列かどうか調べる

PHPは非常に型に柔軟なため、
添字配列(いわゆるキーが0から始まる連番の配列)でも
連想配列(キーが文字列など)でも
基本的に同じように扱うことができる。

ただ、たまに添字配列なのか連想配列なのかを判定したくなる時がある。
チェックする方法としてはキーが数字の連番になってるかを調べたら良いので

//link・・・http://mio-koduki.blogspot.jp/2012/04/php-0-linktruefalsefunction-ishasharray.html
//第一引数・・・調べたい配列
//返り値・・・連想配列であればtrue、でなければfalse
function is_hash($array)
{
    return array_keys($array)!==range(0,count($array)-1);
}

というふうになる。
ただし、array_keysとrangeで2個新たに調べたい配列と同数の要素を持つ配列を作るので、
配列サイズが大きいと無駄なメモリを食うことになる。
そういう時は

//link・・・http://mio-koduki.blogspot.jp/2012/04/php-0-linktruefalsefunction-ishasharray.html
//第一引数・・・調べたい配列
//返り値・・・連想配列であればtrue、でなければfalse
function is_hash($array)
{
    $i=0;
    foreach($array as $k=>$v)
    {
        if($k!==$i++)
        {
            return true;
        }
    }
    return false;
}

素直にforeachで回しながら、連番になってるかチェックすれば良い。

ポイントとなる関数
  • array_keys ・・・ 配列のキーすべて、あるいはその一部を返す
  • range ・・・ ある範囲の整数を有する配列を作成する

0 件のコメント:

コメントを投稿