检查数组是不是不是索引数组[重复]

Posted

技术标签:

【中文标题】检查数组是不是不是索引数组[重复]【英文标题】:Check if an array it not a indexed array [duplicate]检查数组是否不是索引数组[重复] 【发布时间】:2013-02-19 01:52:13 【问题描述】:

我需要检查一个特定的数组是 keyed 还是索引。例如:

// Key defined array
array('data-test' => true, 'data-object' => false);

// Indexed array
array('hello', 'world');

我可以轻松地使用数组键执行foreach 来检查是否全部为整数。但是存在一个正确的方法来检查它吗?内置 php 函数?

可能的解决方案

// function is_array_index($array_test);
//    $array_test = array('data-test' => true, 'data-object' => false);

foreach(array_keys($array_test) as $array_key) 
    if(!is_numeric($array_key)) 
        return false;
    


return true;

【问题讨论】:

【参考方案1】:
function is_indexed($arr) 
  return (bool) count( array_filter( array_keys($arr), 'is_string') );

【讨论】:

【参考方案2】:

这是来自php.net function.is-array:

function is_assoc($array) 
    return (is_array($array) && 0 !== count(array_diff_key($array, array_keys(array_keys($array)))));

【讨论】:

【参考方案3】:

您可以检查密钥[0]

$arr_str = array('data-test' => true, 'data-object' => false);

$arr_idx = array('hello', 'world');

if(isset($arr_str[0])) echo 'index';  else  echo 'string'; 

echo "\n";

if(isset($arr_idx[0])) echo 'index';  else  echo 'string'; 

示例:http://codepad.org/bxCum7fU

【讨论】:

【参考方案4】:

功能

function isAssoc($arr)

    return array_keys($arr) !== range(0, count($arr) - 1);

应该可以。

【讨论】:

以上是关于检查数组是不是不是索引数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查数组是不是唯一[重复]

确定 PHP 数组是不是使用键或索引 [重复]

在 Javascript 中,如何检查数组是不是有重复值?

用PHP检查一个数组是不是包含另一个数组[重复]

检查数组元素是不是包含其他数组中的部分值[重复]

Java - 检查项目是不是在数组中[重复]