首页 > 解决方案 > 从嵌套数组中获取最大日期

问题描述

如果我有以下数组,我怎样才能获得最大到期日期?到期日期始终是键为 5 的值数组中的值,即 $results['values']['5']

  array (
     0 => 
       array (
         'values' => 
            array (
              1 => '123456',
              2 => 'Blue',
              3 => 'Container',
              4 => '03-01-2020',  // start date
              5 => '03-01-2021',  // exp date
              6 => '',
              7 => '',
           ),
        ),
     1 => 
       array (
         'values' => 
            array (
              1 => '21312',
              2 => 'Green',
              3 => 'Box',
              4 => '2019-04-12',  // start date
              5 => '',            //exp date
              6 => '',
              7 => '',
            ),
         ),
     2 => 
       array (
         'values' => 
            array (
              1 => '434324',
              2 => 'Orange',
              3 => 'Box',
              4 => '2018-04-28', // start date
              5 => '2019-04-23', // exp date
              6 => '',
              7 => '',
            ),
      ),
  )

我知道我可以为一个简单的数组执行以下操作:

 $max = max(array_map('strtotime', $arr));
 echo date('d F Y', $max);

如何使用嵌套数组实现相同的效果?

标签: phparraysdate

解决方案


由于您已经在使用array_map,您可以使用一个自定义函数来获取到期日期并strtotime一次性使用它:

$expiryDates = array_map(static function ($entry) {
  return strtotime($entry['values'][5]);
}, $input);

echo date('d F Y', max($expiryDates));

演示:https ://3v4l.org/AiFtA

奖励 - 使用 PHP 7.4 短闭包:

$expiryDates = array_map(fn($entry) => strtotime($entry['values'][5]), $input);
echo date('d F Y', max($expiryDates));

推荐阅读