猿问

PHP中,$arr = [ '0'=>'是', '1'=>'否' ]是索引数组吗?怎么看起来和关联数组结构类似!

/**
 * 判断数组是关联数组还是索引数组
 * @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'=>'否' ]是索引数组,怎么看起来好像关联数组结构?!

撒科打诨
浏览 649回答 3
3回答

猛跑小猪

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

森栏

PHP在数组中很大程度上体现了弱类型语言的风格,虽然这里的数字是字符串类型,但是作为这个数组中的key默认会变成int类型,所以数字类型的key的数组理论上是索引数组,你可以通过var_dump打印查看类型:查看结果 补充: 其实在通过索引读取数据的时候,不应该说这个数组就是索引数组,也可以说它是关联数组,PHP做了兼容,两种都可以,就比如你判断一个变量tt是否等于1,$tt == 1和$tt === 1是不一样的,它就属于前者,针对数字不判断他的类型,数字或者字符串类型都可以

炎炎设计

是索引数组,你可以根据你key值来判断,key值为int则索引数组,key值为string则为关联数组。
随时随地看视频慕课网APP
我要回答