Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取不为null的数组的最后一个元素_Php_Arrays - Fatal编程技术网

Php 获取不为null的数组的最后一个元素

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-

我有一个多维数组,我想找到一种简单的方法,在“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-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
              }

             }

?>