在命名键时获取foreach数字索引

时间:2016-03-10 17:42:28

标签: php foreach

这个问题只是为了好玩而出于好奇。

编辑:我的问题不同于 How to find the foreach index 因为在我的情况下,$ key已经是非数字值。

如果没有在foreach范围内增加foreach的变量,就像通常的$ i一样,有没有办法在$ key已经命名时获取项目的索引?

例子:

$myNumericIndexArray = ('foo', 'bar', 'go', 'habs');

foreach($myNumericIndexArray as $key => $value){
    //Here $key will be 0 -> 1 -> 2 -> 3
}

现在,如果我有:

$myNamedIndexArray = ('foo' => 'bar', 'go' => 'habs', 'CSGO_bestTeam' => 'fnatic');

foreach($myNamedIndexArray as $key => $value){
    //Here $key will be foo -> go -> CSGO_bestTeam
}

我可以,而不必:

$i=0;
foreach($myNamedIndexArray as $key => $value){
    //Here $key will be foo -> go -> CSGO_bestTeam
    $i++;
}

访问指定数组的索引。在foreach声明中声明的东西,如for或者$ key的状态?

有一个好的。

4 个答案:

答案 0 :(得分:4)

如果你真的想要关联数组的索引数组而不是试试这个:

$myNamedIndexArray = ['foo' => 'bar', 'go' => 'habs', 'CSGO_bestTeam' => 'fnatic'];

$keys = array_keys($myNamedIndexArray);
foreach($myNamedIndexArray as $key => $value){
     echo array_search($key, $keys);
}

答案 1 :(得分:3)

这样的事情:

variables

答案 2 :(得分:3)

我不知道您为什么要在每次循环迭代中执行array_keys()array_search()。只需构建一个参考数组,您仍然可以foreach()原始数据:

$positions = array_flip(array_keys($myNamedIndexArray));

foreach($myNamedIndexArray as $key => $value){
    echo "{$key} => {$value} is position {$positions[$key]}\n";
}

答案 3 :(得分:2)

我尝试这样的事情:

<?php

    $myNamedIndexedArray = ['foo' => 'bar', 'go' => 'habs', 'CSGO_bestTeam' => 'fnatic'];

    $myNumberIndexedArray = array_keys($myNamedIndexedArray);
    foreach($myNumberIndexedArray as $key => $value){
        echo $key. " => " . $myNamedIndexedArray[$myNumberIndexedArray[$key]]."<br />";
    }

?>

输出将是:

0 => bar
1 => habs
2 => fnatic