php中数组内部按数组中最小值排序
我有一系列的菜单(早餐、午餐、晚餐)以及它们的开始时间(08:00:00、11:00:00、16:00:00),我需要在将来拿出离现在最近的菜单()并知道它是哪一个菜单。这就是我所拥有的: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点之前) 这让我最快
$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"
}
}