Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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中数组内部按数组中最小值排序_Php_Arrays - Fatal编程技术网

php中数组内部按数组中最小值排序

php中数组内部按数组中最小值排序,php,arrays,Php,Arrays,我有一系列的菜单(早餐、午餐、晚餐)以及它们的开始时间(08:00:00、11:00:00、16:00:00),我需要在将来拿出离现在最近的菜单()并知道它是哪一个菜单。这就是我所拥有的: $menus = array( array("breakfast", "08:00:00"), array("lunch", "11:00:00"), array("dinner", "16:00:00") ); 这就是我得到最快菜单的方式(假设是早上8点之前) 这让我最快

我有一系列的菜单(早餐、午餐、晚餐)以及它们的开始时间(08:00:00、11:00:00、16:00:00),我需要在将来拿出离现在最近的菜单()并知道它是哪一个菜单。这就是我所拥有的:

$menus = array(
    array("breakfast", "08:00:00"), 
    array("lunch", "11:00:00"),
    array("dinner", "16:00:00")
    );
这就是我得到最快菜单的方式(假设是早上8点之前)

这让我最快的时间
08:00:00
,但我不知道如何将菜单附加到这个实现。假设它回显
08:00:00
,我如何才能在那里获得
$菜单
,这样我也可以知道
08:00:00
对应于
“早餐”

为什么不呢

$menus = array(
    '08:00:00' => 'breakfast'
    ...
    '16:00:00' => 'dinner'
)
时间是键,值是附加到该时间的菜单

如果使用双数组结构,则只要两个数组中的键在位置上具有1:1的对应关系,就可以找到该值的键,然后在另一个数组中查找:

$min = min($time);
$key = array_keys($time, $min);
$menu = $menu[$key];

虽然我认为可以改进阵列结构,但我只是想看看如何使用您的特定数据集,因此:

    $menus = array(
        array("breakfast","08:00:00"), 
        array("lunch","11:00:00"),
        array("dinner","16:00:00")
    );

    foreach($menus as $a) {
       $menu[] = $a[0];
       $time[] = $a[1];
    }
考虑到这一点,您可以通过一个简单的迭代函数来完成:

    function getMenu($time,$menus)
    {
        foreach($menus as $menu)
        {
            if($menu[1] == $time) return($menu[0]);
        }
    }
您可以这样称呼它:
echogetmenu(min($time),$menus)


不是最优的,数据结构还有很多需要改进的地方,但可以完成工作…

要按最低值对数组排序,保留其余的键,可以尝试以下操作:

uasort($menus, function($a, $b) { 
    return $a[1] - $b[1]; 
});
例如,如果对以下数组运行上述命令

$menus = array(
    array("dinner", "16:00:00"),
    array("breakfast", "08:00:00"), 
    array("lunch", "11:00:00"),
    array("brunch", "09:30:00")
    );
您将得到以下结果:

array(4) {
  [1]=>
  array(2) {
    [0]=>
    string(9) "breakfast"
    [1]=>
    string(8) "08:00:00"
  }
  [3]=>
  array(2) {
    [0]=>
    string(6) "brunch"
    [1]=>
    string(8) "09:30:00"
  }
  [2]=>
  array(2) {
    [0]=>
    string(5) "lunch"
    [1]=>
    string(8) "11:00:00"
  }
  [0]=>
  array(2) {
    [0]=>
    string(6) "dinner"
    [1]=>
    string(8) "16:00:00"
  }
}
可能重复的
array(4) {
  [1]=>
  array(2) {
    [0]=>
    string(9) "breakfast"
    [1]=>
    string(8) "08:00:00"
  }
  [3]=>
  array(2) {
    [0]=>
    string(6) "brunch"
    [1]=>
    string(8) "09:30:00"
  }
  [2]=>
  array(2) {
    [0]=>
    string(5) "lunch"
    [1]=>
    string(8) "11:00:00"
  }
  [0]=>
  array(2) {
    [0]=>
    string(6) "dinner"
    [1]=>
    string(8) "16:00:00"
  }
}