如何在数组中获得第一个非零值和最后一个非零值索引?

时间:2018-03-09 09:12:07

标签: php

好的,我有一个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语句做到这一点,但它会变得非常混乱。

3 个答案:

答案 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()默认删除0false''