您如何建议获取数组中最后一个匹配值的键?
$arr = array(
0 => 0,
1 => 1,
2 => 2,
3 => 3,
4 => 4,
5 => 5,
6 => 5,
7 => 5,
8 => 5,
9 => 5, // <--- this is the key I'm after!
10 => 6,
11 => 7,
12 => 8,
13 => 9,
14 => 10,
15 => 11);
function returnLastMatching($haystack,$needle) {
// return 9
}
echo returnLastMatching($arr,5); // "9"
答案 0 :(得分:2)
尝试以下方法:
$last_key = -1;
$foreach ($haystack as $key => $value) {
if ($value == $needle) {
$last_key = $key;
}
}
每当值=针时,它将覆盖最后一个元素并保存该键,最后将出现最后一次。
==正如宝来建议==
function returnLastMatching($haystack,$needle) {
return array_pop(array_keys($haystack, $needle));
}
答案 1 :(得分:2)
使用array_pop
和array_keys
function returnLastMatching($haystack,$needle) {
return array_pop(array_keys($haystack, $needle));
}
array (size=5)
0 => int 5
1 => int 6
2 => int 7
3 => int 8
4 => int 9
9
答案 2 :(得分:1)
The foreach construct有两个可能的签名,其中一个也会为您提供当前元素的键值:
function returnLastMatching($haystack,$needle) {
foreach (array_reverse($haystack) as $k => $val)
if ($val == $needle) return $k;
// instead of
// foreach ($haystack as $val)...
}
要获取最后一个元素,在将数组传递给foreach时会添加array_reverse
调用。
答案 3 :(得分:1)
function returnLastMatching($haystack,$needle) {
return array_pop(array_keys($haystack, $needle));
}
答案 4 :(得分:1)
此解决方案使用array_search()
和array_reverse()
,您首先反转您的数组,然后取出与您的针匹配的第一个键:
function returnLastMatching($haystack,$needle) {
return array_search($needle,array_reverse($haystack, true));
}
使用array_keys()
获取与您的指针匹配的所有键,然后从此数组键中获取最后一个元素:
function returnLastMatching($haystack,$needle) {
return end(array_keys( $haystack, $needle));
}
答案 5 :(得分:1)
$lastkey = false;
foreach($haystick as $key => $val) {
if($val === $needle) $lastkey = $key;
}
return $lastkey;
这将迭代到haystick的末尾,因此如果有至少一个则返回最后一个键,如果没有则返回false。
答案 6 :(得分:1)
您可以使用array_keys
$keys = array_keys($arr, 5); //will return all matched keys
echo end($keys); //will output the last key it was matched with
答案 7 :(得分:0)
这应该可行:
function returnLastMatching($haystack,$needle) {
foreach($haystack as $key=>$element)
{
if($element==$needle)
{
$temp=$key;
}
}
return $temp;
}
答案 8 :(得分:0)
使用
更改echo returnLastMatching($arr,5);
$arr = array_flip($arr);
echo $arr[5];
无需使用我们可以获得结果的功能