有一个内置函数可以查找值的数组键 - 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];
}
}
}
我更喜欢更好的东西。
答案 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.