我如何找到"针"的最后一次出现?在数组PHP中

时间:2014-01-19 22:03:13

标签: php arrays

有一个内置函数可以查找值的数组键 - array_search。但是从示例中可以看出,该函数仅查找第一次出现,而我需要最后一次出现:

<?php
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;
?>

是否有内置功能? 如果没有,我可以foreach向后退(从最后一个键到第一个键)吗?

如果所有答案都没有,我想这是唯一的解决方案:

function array_search_last($needle, $array, $strict = false) {
    $keys = array_keys($array);
    //Not sure how smart PHP is, so I'm trying to avoid IF for every iteration
    if($strict) {
      for($i=count($keys)-1; $i>=0; $i--) {
        //strict search
        if($array[$keys[$i]]===$needle)
          return $keys[$i];
      } 
    }
    else {
      for($i=count($keys)-1; $i>=0; $i--) {
        //benevolent search
        if($array[$keys[$i]]==$needle)
          return $keys[$i];
      } 
    }
}

我更喜欢更好的东西。

3 个答案:

答案 0 :(得分:8)

array_search('green', array_reverse($array));

首先反转它,然后进行搜索

答案 1 :(得分:5)

但他们都错过了一件事,那会导致OP需要不正确的结果,他正在寻找最后一个元素的索引而反转数组将导致重新索引键(当数字时),所以最终解决方案是将preserve_keys参数设置为TRUE see docs

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

$reversed = array_reverse($array, true);

echo array_search('red', $reversed);
// outs 3

答案 2 :(得分:0)

这是一个适用于多维关联数组的更通用的解决方案。它找到特定列的所有匹配值:

with open("input.txt") as f:
    for line in f:
        # same as above: split the line, etc.