好的,我有一个PHP数组,如下所示
0
0
0
0
0
0
500 // Get index of this value which is 6
11000
100
110
221
1245
2141// Get index of this value which is 12
0
0
0
0
0
是否有PHP函数可以获取第一个非零值索引和最后一个非零值索引?还是一种非常漂亮的方式呢?
我知道我可以用一些IF
语句做到这一点,但它会变得非常混乱。
答案 0 :(得分:9)
您可以使用array_filter:
演示:Link
$array = [0,0,0,0,0,0,500 ,11000,100,110,221,1245,2141,0,0,0,0,0];
$result = array_filter($array); // it will filter false values
echo key($result); // 6
end($result); // set pointer to end of the array
echo key($result); // 12
答案 1 :(得分:3)
单array_reduce()
函数的替代解决方案:
$arr = [0,0,0,0,0,0,500 ,11000,100,110,221,1245,2141,0,0,0,0,0];
$result = array_reduce($arr, function($r, $v) use (&$c){
if ($v) $r[($r? 1:0)] = $c;
$c++;
return $r;
}, []);
print_r($result);
输出:
Array
(
[0] => 6
[1] => 12
)
答案 2 :(得分:2)
您可以使用array_filter(),然后使用reset()
和end()
。
如果没有提供回调,则将删除数组的所有条目等于FALSE(请参阅转换为布尔值)。
$a = [
0,
0,
0,
0,
0,
0,
500 ,
11000,
100,
110,
221,
1245,
2141,
0,
0,
0,
0,
0
];
$filteredArray = array_filter($a);
$firstNonZeroKey = key($filteredArray);
end($filteredArray);
$lastNonZeroKey = key($filteredArray);
array_filter()
默认删除0
,false
和''
值