Php 获取不为null的数组的最后一个元素
我有一个多维数组,我想找到一种简单的方法,在“time_reported”不为NULL时返回上次出现的键 示例:对于下面的数组,输出应为n°2键,因为它是赋值时的最后一个数组Php 获取不为null的数组的最后一个元素,php,arrays,Php,Arrays,我有一个多维数组,我想找到一种简单的方法,在“time_reported”不为NULL时返回上次出现的键 示例:对于下面的数组,输出应为n°2键,因为它是赋值时的最后一个数组 数组( 0 => 排列( '点名称'=>'多加尔', “报告时间”=>“2019-11-14 01:35:00”, ), 1 => 排列( “点名称”=>“54/20”, “报告时间”=>“2019-11-14 02:10:00”, ), 2 => 排列( “点名称”=>“52/30”, “报告时间”=>“2019-
数组(
0 =>
排列(
'点名称'=>'多加尔',
“报告时间”=>“2019-11-14 01:35:00”,
),
1 =>
排列(
“点名称”=>“54/20”,
“报告时间”=>“2019-11-14 02:10:00”,
),
2 =>
排列(
“点名称”=>“52/30”,
“报告时间”=>“2019-11-14 02:20:00”,
),
3 =>
排列(
“点名称”=>“49/40”,
“报告的时间”=>NULL,
),
4 =>
排列(
“点名称”=>“47/50”,
“报告的时间”=>NULL,
),
5 =>
排列(
“点名称”=>“端口”,
“报告的时间”=>NULL,
),
)
我已经有了使用foreach循环查找最后一个匹配项的想法,但我不知道这是否是最有效的方法如果数组是有序的,您可以遍历它,直到
$item[“time_reported”]
不为空。在最坏的情况下,这将在O(N)内完成。如果数组没有排序,并且您需要最早/最晚的时间,那么您需要查看数组中的每个元素,以获得O(N)的最佳(和每个)情况
使用foreach循环,我们可以使用
array\u reverse
函数来反转数组,将最后一个数组循环到第一个数组。然后检查键值是否为null或空。你可以看到结果
Tip:如果您将数组表示为PHP代码,我们可以使用它进行测试,而不是作为调试输出,这对我们有很大帮助。感谢Tip@tadman,modified。此方法的问题是,当最后出现n°0键时,循环不返回任何内容。。你有解决办法吗@Alexb@MagicNesquick简化示例以处理此边缘情况。您只需要在循环结束时使用$i
的值。
$a = array(...);
for ($i = count($a) - 1; $i > 0 && $a[$i]["time_reported"] === null; $i--);
echo "Found at index {$i}\n";
<?php
$myarrays = array( array (
'point_name' => 'DOGAL',
'time_reported' => '2019-11-14 01:35:00',
),
array (
'point_name' => '54/20',
'time_reported' => '2019-11-14 02:10:00',
),
array (
'point_name' => '52/30',
'time_reported' => '2019-11-14 02:20:00',
),
array (
'point_name' => '49/40',
'time_reported' => NULL,
),
array (
'point_name' => '47/50',
'time_reported' => NULL,
),
array (
'point_name' => 'PORTI',
'time_reported' => NULL,
),
);
#echo "<pre>";
#print_r($myarrays);
foreach ( array_reverse($myarrays) as $array ) {
if($array['time_reported'] !== NULL){
echo $array['point_name']."\n";
echo $array['time_reported'];
break 1; // stop the loop
}
}
?>