【问题标题】:PHP: Getting array typePHP:获取数组类型
【发布时间】:2009-05-24 01:28:26
【问题描述】:

除了显式检查数组键之外,是否有一个 php 函数可以用来自动检测数组是否为关联数组?

【问题讨论】:

标签: php arrays


【解决方案1】:

我的简短回答:是的

如果您假设“非关联数组”从 0 开始索引,则更快更容易:

if ($original_array == array_values($original_array))

【讨论】:

  • 我觉得我必须继续,因为其他需要更长时间的答案正在被投票。不必检查密钥。 array_values() 返回一个整数索引数组,因此如果将相关数组与其 array_values() 进行比较并且它们相等,则原始数组是一个基于 0 的整数索引数组。这是最短、最流畅的方式。试试看。
  • 我同意,没有索引的数组0开始连续被认为是关联的,因为它们不能被典型的for ($x++)模式可靠地遍历。因此,这个测试可能是最好的使用。不过,这变成了一场哲学辩论,因为 PHP 数组根本不是一个或另一个。 :)
  • 我只是想通过我发现的最快/最流畅的方式来确定索引是否为 0 到 N,而无需对键进行任何类型的显式检查。

    爱 PHP 数组。

【解决方案2】:

引自官网:

索引和关联数组 types 在 PHP 中是相同的类型,

所以我能想到的最佳解决方案是在所有键上运行,或者使用 array_keys,implode,is_numeric

【讨论】:

  • 请参阅下面关于将原始数组与其 array_values() 进行比较的评论。
【解决方案3】:
函数 is_associative_array($array) { return (is_array($array) && !is_numeric(implode("", array_keys($array)))); }

测试密钥效果很好。

【讨论】:

    【解决方案4】:

    查看is_array 的讨论。

    【讨论】:

      【解决方案5】:

      简短回答:不。

      长答案:关联数组和索引数组在 PHP 中是相同的类型。索引数组是关联数组的子集,其中:

      • 键只是整数;
      • 它们的范围从 0 到 N-1,其中 N 是数组的大小。

      如果需要,您可以尝试使用 array_keys() 进行检测并与 range() 结果进行比较。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 1970-01-01
        • 2011-06-21
        • 1970-01-01
        • 1970-01-01
        • 2011-05-07
        相关资源
        最近更新 更多