Daily Archives: 2011/11/16

[PHP]如何判断array真正的类型

习惯了javascript中的array和object.在php中array又可以是Array也可以是Object(这里的Object 与js的object相同. 并非stdClass的Object). 但是问题来了如何判断他真正的类型.在有些时候, 我们需要它真实的类型.才能做一点事情.
目前我找到一个非常挫的方法.通过判断array头部的key是否为0, array最后一个元素的key是否为count – 1值. 并且同时判断, 他的所有key是否为数字. 缺陷在于如果加入一个数组为array(1, 2 => “c”, 10 => 6, 4=>”1″, 3). 这个时候仍然能通过.
刚刚测试了一下, 如何改动了key值. 后面会根据上面一个key值变化.测试如下:

Array ( [0] => 1 [2] => c [10] => 6 [4] => 5 [11] => 3 )

判断方法: 如果有更好的, 请留贴告诉我.

function getRealArrayType($d){
		if (gettype($d) != "array"){return;}	
		//get realtype
		$realType = "array";
		//array / object
		$count = count($d);
		reset($d);
		//first element key is 0?
		if (key($d) != 0){
			$realType = "object";
		}
		end($d);
                //the last element key is (count - 1)
		if (key($d) != ($count - 1)){
			$realType = "object";
		}

		reset($d);
		while (next($d)){
			$key = key($d);
			if (is_string($key)){
				$realType = "object";
				break;
			}
		}
		reset($d);//reset position
		return $realType;
	}