【问题标题】:Check what kind of array this is via php [duplicate]通过php检查这是什么类型的数组[重复]
【发布时间】:2013-10-18 18:57:01
【问题描述】:

我正在寻找一个简单的方法来查看这个数组:

array('apples', 'bananas');

是否关联,即key=>value。现在 PHP 会给你类似的东西:

array(2){
    [0]=>'apples'
    [1] => 'bananas'
}

如果你var_dump 上面的数组。所以理论上我有我的关联数组。但我正在寻找的是查看array('key' => 'some value', 'some_other_key' => 'some other value'); 是“真正的”关联数组还是只是一个常规数组。

我在整个堆栈中看到了一些关于此的帖子,但他们的很多答案非常复杂或写得不好,甚至根本不是 OO。

【问题讨论】:

  • 那你为什么不告诉我们你看到了什么以及它为什么不够好?
  • 真正的关联数组和常规数组有什么区别?如果不计算 SplFixedArray 的实例,PHP 只知道一个数组。
  • 你拥有的是一个枚举数组,而不是一个关联数组:如果键是字符串,那么它将是一个关联数组
  • 你见过this吗?

标签: php arrays


【解决方案1】:

你的意思是你想区分纯数字键数组和纯数字键数组。字符串键控?

$string_keys = preg_grep('/\D/', array_keys($your_array));
if (count($string_keys) > 0) {
   echo "at least one non-numeric key - it\'s associative";
} else {
   echo "no non-numeric keys. it's a normal array";
}

简而言之:获取数组中的所有键,使用 preg_grep 函数在生成的键数组中搜索非数字。如果你得到一个非零的匹配键计数,你就有一个关联数组。

【讨论】:

  • 如果我理解正确,array('key' => 'value') 会回显"at least one non-numeric key - it\'s associative";
  • 这无法识别数组中的“孔”,请参阅:codepad.org/3UYjy0HtThis answer 提供了更好的方法。)
  • @comfreek:OP 并不要求对数组进行连续索引……只是它是否具有关联性。稀疏数组在 PHP 和许多其他语言中是完全合法的。
  • @MarcB 有点挑剔,但你的函数也认为array( '0' => 'Value' ) 是数字。
  • '0' == 0 在 PHP 中为 TRUE,所以是的......它是一个数字键数组
猜你喜欢
  • 2015-04-16
  • 2013-10-15
  • 2013-07-20
  • 2020-04-16
  • 2017-03-16
  • 1970-01-01
  • 2011-07-10
  • 2018-12-29
  • 2021-12-19
相关资源
最近更新 更多