如何确定PHP数组是否像这样构建:
array('First', 'Second', 'Third');
或者像这样:
array('first' => 'First', 'second' => 'Second', 'third' => 'Third');
???
答案 0 :(得分:3)
我在PHP工具中使用这些简单的函数:
function is_flat_array($ar) {
if (!is_array($ar))
return false;
$keys = array_keys($ar);
return array_keys($keys) === $keys;
}
function is_hash($ar) {
if (!is_array($ar))
return false;
$keys = array_keys($ar);
return array_keys($keys) !== $keys;
}
我从未在大型阵列上测试过它的性能。我主要在具有10个或更少键的阵列上使用它,所以它通常不是问题。我怀疑它比将$ key与生成的范围0..count($array)
进行比较会有更好的表现。
答案 1 :(得分:0)
print_r($array);
答案 2 :(得分:0)
之间没有区别
array('First', 'Second', 'Third');
和
array(0 => 'First', 1 => 'Second', 2 => 'Third');
前者只有隐式键而不是你指定它们
答案 3 :(得分:0)
function is_assoc($array) {
return (is_array($array)
&& (0 !== count(array_diff_key($array, array_keys(array_keys($array))))
|| count($array)==0)); // empty array is also associative
}
这是另一个
function is_assoc($array) {
if ( is_array($array) && ! empty($array) ) {
for ( $i = count($array) - 1; $i; $i-- ) {
if ( ! array_key_exists($i, $array) ) { return true; }
}
return ! array_key_exists(0, $array);
}
return false;
}
在PHP文档站点上从the is_array comments兴高采烈地滑过。
答案 4 :(得分:0)
这有点棘手,尤其是这种形式array('First', 'Second', 'Third');
隐式让PHP生成键值。
我想一个有效的解决方法就像:
function array_indexed( $array )
{
$last_k = -1;
foreach( $array as $k => $v )
{
if( $k != $last_k + 1 )
{
return false;
}
$last_k++;
}
return true;
}
答案 5 :(得分:0)
以编程方式,你不能。我认为检查像你这样的案件的唯一方法是做类似的事情: foreach($ myarray as $ key => $ value){ if(is_numeric($ key)){ echo“数组似乎使用数字(可能是第一个的情况)”; } }
但这不会检测到数组构建为$ array = array(0 =>“first”,1 =>“second”等)的情况;
答案 6 :(得分:0)
如果你有php> 5.1并且只查找基于0的数组,您可以将代码缩小到
$stringKeys = array_diff_key($a, array_values($a));
$isZeroBased = empty($stringKeys);
我希望这会对你有所帮助 杰罗姆·瓦格纳
答案 7 :(得分:0)
function isAssoc($arr)
{
return $arr !== array_values($arr);
}