有许多 - 好的和不太好的 - 检查关联数组的方法,但是你如何检查“完全关联”的数组呢?
$john = array('name' => 'john', , 8 => 'eight', 'children' => array('fred', 'jane'));
$mary1 = array('name' => 'mary', 0 => 'zero', 'children' => array('jane'));
$mary2 = array('name' => 'mary', 'zero', 'children' => array('jane'));
这里$ john是完全关联的,$ mary1和$ mary2不是。
答案 0 :(得分:2)
为了缩短它,你不能因为每个数组都以相同的方式实现。来自docs:
PHP中的数组实际上是有序地图。映射是将值与键关联的类型。
如果对实现没有任何见解,但我很确定array(1,2,3)
只是array(0=>1, 1=>2, 2=>3)
的简写,即最终它完全相同。你无法区分它。
您只能假设通过array(value, value,...)
创建的数组具有0
的索引,而其他数组则没有。但是你已经看到,情况并非总是如此。
每次尝试检测“关联”数组都会在某些时候失败。
实际问题是:为什么你需要这个吗?
答案 1 :(得分:1)
这是你要找的吗?
<?php
function is_assoc( $array ) {
if( !is_array( $array ) || array_keys( $array ) == range( 0, count( $array ) - 1 ) ) {
return( false );
}
foreach( $array as $value ) {
if( is_array( $value ) && !is_assoc( $value ) ) {
return( false );
}
}
return( true );
}
?>
检测取决于您对关联的定义。此函数检查关联,这意味着没有顺序数字键的数组。有人可能会说,关联是隐式设置密钥而不是由php计算的任何东西。其他人甚至可能将所有PHP数组定义为关联的(在这种情况下is_array()
就足够了)。同样,这一切都取决于,但这是我在我的项目中使用的功能。希望这对你来说已经足够了。