1

您如何建议获取数组中最后一个匹配值的键?

$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"
4

9 回答 9

2

尝试以下操作:

$last_key = -1;
$foreach ($haystack as $key => $value) {
    if ($value == $needle) {
        $last_key = $key;
    }
}

每次 value = needle 时,它​​都会覆盖最后一个元素并保存键,最后你将有最后一次出现。

== 正如 Bora 所建议的 ==

function returnLastMatching($haystack,$needle) {
    return array_pop(array_keys($haystack, $needle));
}
于 2013-09-11T07:43:15.107 回答
2

试试这个array_poparray_keys

function returnLastMatching($haystack,$needle) {
    return array_pop(array_keys($haystack, $needle));
}

过程

使用 array_keys 获取密钥

array (size=5)
  0 => int 5
  1 => int 6
  2 => int 7
  3 => int 8
  4 => int 9

使用 array_pop 获取最后一个元素

9
于 2013-09-11T07:44:45.537 回答
1

foreach 构造有 2 个可能的签名,其中一个还将为您提供当前元素的键值:

function returnLastMatching($haystack,$needle) {
    foreach (array_reverse($haystack) as $k => $val) 
        if ($val == $needle) return $k;
    // instead of
    // foreach ($haystack as $val)...
}

要获取最后一个元素,在array_reverse将数组传递给 foreach 时添加调用。

于 2013-09-11T07:41:47.883 回答
1
function returnLastMatching($haystack,$needle) {
    return array_pop(array_keys($haystack, $needle));
}
于 2013-09-11T07:44:58.060 回答
1

第一个解决方案:

此解决方案使用 array_search()and array_reverse(),您首先反转您的数组,然后获取与您的针匹配的第一个键:

function returnLastMatching($haystack,$needle) {
  return   array_search($needle,array_reverse($haystack, true));
}

第二种解决方案:

用于array_keys()获取与您的 needle 匹配的所有键,然后从该键数组中获取最后一个元素:  

   function returnLastMatching($haystack,$needle) {

      return end(array_keys( $haystack, $needle));
  }
于 2013-09-11T07:45:10.690 回答
1
$lastkey = false;
foreach($haystick as $key => $val) {
    if($val === $needle) $lastkey = $key;
}
return $lastkey;

这将迭代到 haystick 的末尾,因此如果至少有一个键,则返回最后一个键,如果没有,则返回 false。

于 2013-09-11T07:45:48.013 回答
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
于 2013-09-11T07:51:06.383 回答
0

这应该可以工作:

    function returnLastMatching($haystack,$needle) {
    foreach($haystack as $key=>$element)
    {



        if($element==$needle)
        {
            $temp=$key;
        }

    }
      return $temp;
    }
于 2013-09-11T07:51:01.463 回答
0

改变echo returnLastMatching($arr,5);_

$arr = array_flip($arr);
echo $arr[5];

无需使用函数我们可以得到结果

于 2013-09-11T07:59:49.947 回答