【问题标题】:PHP associative arrays - how to treat integer as stringPHP关联数组 - 如何将整数视为字符串
【发布时间】:2011-06-05 23:29:36
【问题描述】:

我有一个简单的关联数组。

$a = array("a"=>"b", "c"=>"d");

我想检查数组中是否存在键“1”,例如

isset($a["1"]);

这个字符串被视为一个整数,所以

echo $a["1"]; //prints "d"

如何让它把它当作一个字符串?

我不想使用 array_key_exists 或 in_array,因为我的基准测试显示 isset 会快很多。

【问题讨论】:

  • .. 简单的答案是,不要对关联数组使用字符串整数。添加前缀,或完全更改您的命名约定。为什么要创建一种变通方法来适应这种可预防的设计选择?
  • 我正在从文本中解析单词并检查它们的索引,其中一些将是数字,所以我必须这样做。
  • -1 假问题,php 不是这样的。
  • @chris,你是什么意思?
  • @Pacerier echo $a["1"]; 不打印 "d"。

标签: php arrays associative-array isset


【解决方案1】:

isset($a["1"]) | isset($a[1]) ?

或者只是 isset($a[1])

甚至 isset($a[intval(1)]) 1000% 确定。

【讨论】:

  • 反之,寻找字符串,而不是整数
【解决方案2】:

看来你不能做你想做的事。来自http://us.php.net/manual/en/language.types.array.php:

键可以是整数或字符串。如果键是整数的标准表示,它将被解释为整数(即​​“8”将被解释为 8,而“08”将被解释为“08”)。

您可能不得不使用 Fosco 的建议,即在所有键前面加上一些东西。如果您在每个键上使用相同的前缀,那么您解析的文本是否可能包含单词和数字都没关系 - 无论如何都要在所有内容上使用相同的前缀。

【讨论】:

    【解决方案3】:

    如果 echo $a['1'] 打印 d,那么您的数组中的元素比您想象的要多。

    请参阅 var_dump($a) 和 print_r($a) 函数来帮助您调试代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多