PHP - 从数组中获取元素的索引

30
我遍历数组时,如何获取当前元素的编号?
我知道可以使用count()函数,但是我希望能够有一个内置函数来获取当前字段的索引,而不必添加额外的计数器变量。
就像这样:
foreach($array as $key => value)
  if(index($key) == count($array) ....

使用 $key 有什么问题? - BoltClock
$key在我的情况下是一个字符串。不管怎样,我只是想知道是否有一个PHP函数可以获取字段索引。如果没有,我就会使用$i计数器... - Alex
对于一个键与数组元素的索引不匹配的情况,我认为Alex想要获取当前的索引。例如:a => apples, b => bananas,那么index(b)将返回1 - Paul Lammertsma
字段索引==键。这是相同的内容。不,没有办法获取项目的位置 - Your Common Sense
Foreach与迭代器一起使用-索引从未知。 - irishbuzz
7个回答

59
你应该使用 key() 函数。
key($array)

应该返回当前键。

如果需要当前键的位置:

array_search($key, array_keys($array));

4
OP希望得到一个职位,而不是一个密钥。不需要获取密钥,因为它已经分配给了$key变量。 - Your Common Sense
1
+1 很好的答案,我只是想提醒Alex,每次搜索数组的效率比起添加一个计数器来说更高。 - Gazler
1
所以没有类似于索引的功能。谢谢 :) 我将只使用计数器。 - Alex
3
我会将其评为负分,因为对我来说这似乎过于夸张了。每次迭代整个数组多两个循环! - Your Common Sense

13

PHP数组既可以通过整数索引访问,也可以通过字符串索引访问。你甚至可以混合使用它们:

array('red', 'green', 'white', 'color3'=>'blue', 3=>'yellow');

你希望'blue'的索引是什么? 是3吗?但那实际上是值'yellow'的索引,这将造成歧义。

另一个解决方案是强制将数组转换为整数索引列表。

foreach (array_values($array) as $i => $value) {
  echo "$i: $value\n";
}

输出:

0: red
1: green
2: white
3: blue
4: yellow

5
foreach() {
    $i++;
    if(index($key) == $i){}
    //
}

2
他说不需要添加额外的计数器变量。 - rideon88

0
function Index($index) {
    $Count = count($YOUR_ARRAY);
    if ($index <= $Count) {
        $Keys = array_keys($YOUR_ARRAY);
        $Value = array_values($YOUR_ARRAY);
        return $Keys[$index] . ' = ' . $Value[$index];
    } else {
        return "Out of the ring";
    }
}

echo 'Index : ' . Index(0);

替换 ( $YOUR_ARRAY )


-1

最近我自己也需要解决这个问题,最终受到了@Zahymaka的答案启发,但是解决了数组2倍循环的问题。

你可以创建一个包含所有键的数组,按照它们存在的顺序,然后通过循环遍历它。

        $keys=array_keys($items);
        foreach($keys as $index=>$key){
                    echo "position: $index".PHP_EOL."item: ".PHP_EOL;
                    var_dump($items[$key]);
                    ...
        }

PS:我知道现在已经有点晚了,但是既然我自己也在搜索这个,也许对其他人也有帮助。


-2

当元素是关联的时,数组不包含索引。在PHP中,数组可以包含如下混合值:

$var = array("apple", "banana", "foo" => "grape", "carrot", "bar" => "donkey");   
print_r($var);

给你:
Array
(
    [0] => apple
    [1] => banana
    [foo] => grape
    [2] => carrot
    [bar] => donkey
)

你需要关联数组中的索引值是为了实现什么目的?

-2

没有办法得到你真正想要的 位置
对于关联数组,要确定最后一次迭代,可以使用已经提到的计数器变量,或者先确定最后一个项目的键:

end($array);
$last = key($array);
foreach($array as $key => value)
  if($key == $last) ....

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