如何返回与值匹配的数组中最后一项的键?

时间:2013-09-11 07:39:47

标签: php arrays sorting

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

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

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_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

答案 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));
}

SECONDE SOLUTION:

使用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];

无需使用我们可以获得结果的功能