我有一个关联数组,我需要找到一个键的数字位置.我可以手动遍历数组来找到它,但有没有更好的方法构建到PHP?
$a = array(
'blue' => 'nice',
'car' => 'fast',
'number' => 'none'
);
// echo (find numeric index of $a['car']); // output: 1
Run Code Online (Sandbox Code Playgroud)
Fos*_*sco 251
echo array_search("car",array_keys($a));
Run Code Online (Sandbox Code Playgroud)
qua*_*oup 34
$blue_keys = array_search("blue", array_keys($a));
Run Code Online (Sandbox Code Playgroud)
http://php.net/manual/en/function.array-keys.php
虽然 Fosco 的答案并没有错,但有一种情况需要考虑:混合数组。想象一下我有一个像这样的数组:
$a = array(
"nice",
"car" => "fast",
"none"
);
Run Code Online (Sandbox Code Playgroud)
现在,PHP 允许这种语法,但它有一个问题:如果我运行 Fosco 的代码,我会发现这对我来说0 是错误的,但为什么会发生这种情况呢?
因为在字符串和整数之间进行比较时,PHP 会将字符串转换为整数(在我看来这有点愚蠢),所以当array_search()搜索索引时,它会停在第一个索引处,因为显然("car" == 0) 是 true。
设置array_search()为严格模式并不能解决问题,因为即使array_search("0", array_keys($a))存在索引为 0 的元素,也会返回 false。
所以我的解决方案只是将所有索引转换为array_keys()字符串,然后正确比较它们:
echo array_search("car", array_map("strval", array_keys($a)));
Run Code Online (Sandbox Code Playgroud)
打印出来1,这是正确的。
编辑:
正如肖恩在下面的评论中指出的那样,如果您碰巧搜索这样的 int 索引,那么同样的事情也适用于索引值:
$a = array(
"foo" => "bar",
"nice",
"car" => "fast",
"none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));
Run Code Online (Sandbox Code Playgroud)
您总是会得到0,这是错误的,因此解决方案是将索引(如果您使用变量)转换为如下字符串:
$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108545 次 |
| 最近记录: |