Php 命名键时获取每个数值索引

Php 命名键时获取每个数值索引,php,foreach,Php,Foreach,这个问题只是为了好玩,出于好奇。 编辑:我的问题与你的不同 因为在我的例子中,$key已经有了一个非数值 如果在foreach外部没有一个变量,而该变量在foreach范围内是递增的(通常是$i),那么当$key已经命名时,有没有办法获取项的索引 例如: $myNumericIndexArray = ('foo', 'bar', 'go', 'habs'); foreach($myNumericIndexArray as $key => $value){ //Here $key

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

编辑:我的问题与你的不同 因为在我的例子中,$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的状态


有一个好的。

如果您确实想要关联数组的索引数组,请尝试以下方法:

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

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

我想试试这样的东西:

<?php

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

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

?>
大概是这样的:

<?php
$myNamedIndexArray = array('foo' => 'bar', 'go' => 'habs', 'CSGO_bestTeam' => 'fnatic');
$numericIndexArray = array_keys($myNamedIndexArray);
foreach($numericIndexArray as $key=>$value){
    echo $key.'</br>'; //here key will be 0 1 2
    echo $value. '</br>';
}

我不知道为什么每次循环迭代都要执行
array\u keys()
array\u search()
。只需构建一个引用数组,您仍然可以
foreach()
原始数组:

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

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

不,不能在foreach构造中声明计数器变量。您可以使用for循环执行此操作,只需将键保存在一个数组中,然后可以使用计数器变量访问该数组。您的意思是访问Associateve数组中的数字索引吗?另外:foreach没有自己的作用域。PHP有函数作用域,无论您在foreach中声明什么,您都可以在它之外使用。@Drudge是的,基本上在处理它们时在键上有一个计数器。无需在每次迭代时递增的范围外声明计数器。这没有目标,真的,只是好奇是否有整洁的东西来做这个可能的复制品,这正是我所寻找的。它保留命名索引,并提供迭代项的数字索引。完美的谢谢。这是可行的,但是,为什么每次循环迭代都要执行array_keys()和array_search()。我已经相应地更新了代码。@RavindraBhalothia我想OP只是想要密钥,那么为什么要在每次循环迭代中再次使用数组搜索?@Drudge:我很想知道是否有其他方法可以做到这一点。请让我们知道。这可能有效。我同意拉文德拉的回答,但这也涵盖了我的问题。谢谢你的时间:)太好了,对你有用。如果这个答案看起来对你有用,那么请接受这个答案,这样它也能对其他人有所帮助。我同时收到了Drudge的答案和你的答案,答案是一样的。这证实了这一点。谢谢你的时间,这是常有的事。有时我们在同一时间走同一条路。重要的是asnwers帮了你。感谢您的upvote。如果PHP以与array_键相同的顺序在数组上进行迭代,那么这是可行的。这是我所没有的知识。有关于这方面的文件我可以阅读吗?这将成为我最喜欢的答案,因为它满足了问题的主要目的,并且节省了CPU周期。我不确定我是否理解这个问题
array_keys()
将第一个键分配给索引0,第二个键分配给索引1,以此类推。
foreach()
重置数组指针并从数组的第一个元素开始。除非您以某种方式修改,
$positions
数组和
$myNamedIndexArray
将始终匹配。将任何阵列插入该阵列,它就会按预期工作。这澄清了我对PHP中foreach循环的理解。我更喜欢你的答案,谢谢。还有一些“轻松”的阅读:是的!实际上,我已经打开了标签。另外,很快,我是stackoverflow的新手,你知道为什么我的问题投了反对票吗?我认为,没有任何问题像我的一样,而且它的结构也很好。是因为它不符合“现实世界工作”的目的吗?再次感谢。
$positions = array_flip(array_keys($myNamedIndexArray));

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