PHP关联数组 - 如何将整数视为字符串处理

7

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

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

我想检查数组中是否存在键“1”,例如:
isset($a["1"]);

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

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

如何将其视为字符串?

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


3
简单的答案是,不要在关联数组中使用字符串整数。添加前缀,或者完全改变命名规范。为什么要创建一个解决这个可预防性设计选择的变通方法呢? - Fosco
我正在从文本中解析单词并检查它们的索引,其中一些将是数字,所以我必须这样做。 - bcoughlan
2
-1 无意义的问题,PHP 不会表现出这种行为。 - goat
@chris,你是什么意思? - Pacerier
@Pacerier echo $a["1"]; 不会输出 "d" - goat
正如预期的那样,它打印出“未定义索引:1”。 - Dmitri Zaitsev
3个回答

6

看起来你想做的事情似乎是不可能实现的。以下内容来源于http://us.php.net/manual/en/language.types.array.php:

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

您可能需要使用Fosco的建议,在所有键上加上前缀。如果您在每个键上使用相同的前缀,则无论您解析可能包含单词和数字的文本,都不会有问题-无论如何都给所有内容加上相同的前缀。


0

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

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

甚至可以使用isset($a[intval(1)])来确保1000%的准确性。


反过来,寻找字符串而不是整数。 - bcoughlan

0
如果 echo $a['1'] 输出 d,则您的数组可能比您意识到的要更多元素。
使用 var_dump($a) 和 print_r($a) 函数来帮助您调试代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接