确定PHP数组是否使用键或索引

时间:2010-04-12 20:53:52

标签: php arrays indexing key

如何确定PHP数组是否像这样构建:

array('First', 'Second', 'Third');

或者像这样:

array('first' => 'First', 'second' => 'Second', 'third' => 'Third');

???

8 个答案:

答案 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);
}