0
/**
 * 判断数组是关联数组还是索引数组
 * @param $array
 */
function AssociativeOrIndexArray($array){
    if (!is_array($array)){
        echo 'not array';
        return;
    }
    $c = count($array);
    $in = array_intersect_key($array,range(0,$c-1));

    if(count($in) == $c) {
        echo '索引数组';
    }else if(empty($in)) {
        echo '关联数组';
    }else{
        echo '混合数组';
    }
}

//索引数组
$arr = array(1,2,3,4);
//关联数组
$arr = array('a'=>'a1','b'=>'b1','c'=>'c1');
//混合数组
$arr = array(1,'a'=>'a1',2,3,'cc'=>'4');
//索引数组
$arr = [ '0'=>'是', '1'=>'否' ];

AssociativeOrIndexArray($arr);

我测试的结果$arr = [ '0'=>'是', '1'=>'否' ]是索引数组,怎么看起来好像关联数组结构?!

唐成勇 5.5k
2017-09-19 提问
3 个回答
2

PHP是弱类型的语言,对类型不敏感,能忍则忍。

2

PHP在数组中很大程度上体现了弱类型语言的风格,虽然这里的数字是字符串类型,但是作为这个数组中的key默认会变成int类型,所以数字类型的key的数组理论上是索引数组,你可以通过var_dump打印查看类型:查看结果

补充: 其实在通过索引读取数据的时候,不应该说这个数组就是索引数组,也可以说它是关联数组,PHP做了兼容,两种都可以,就比如你判断一个变量tt是否等于1$tt == 1$tt === 1是不一样的,它就属于前者,针对数字不判断他的类型,数字或者字符串类型都可以

0

是索引数组,你可以根据你key值来判断,key值为int则索引数组,key值为string则为关联数组。

撰写答案

推广链接