Php 将最高温度指定给多维数组中的特定日期
我确信这个标题有点模糊,但我希望这个例子能更好地解释这个问题 因此,我有一个数组,其中包含40个结果的列表。在每个结果中,都有一个时间戳,我将其转换为特定的一天,如“星期一”和温度。问题是,一天中最多可以有8个时段。以及每个周期的温度。我必须根据当天的所有相关温度,确定如何设定某一天的最高温度 因此,数组看起来像这样:Php 将最高温度指定给多维数组中的特定日期,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我确信这个标题有点模糊,但我希望这个例子能更好地解释这个问题 因此,我有一个数组,其中包含40个结果的列表。在每个结果中,都有一个时间戳,我将其转换为特定的一天,如“星期一”和温度。问题是,一天中最多可以有8个时段。以及每个周期的温度。我必须根据当天的所有相关温度,确定如何设定某一天的最高温度 因此,数组看起来像这样: array (size=40) 0 => 'dt' => int 1530802800 'main' =>
array (size=40)
0 =>
'dt' => int 1530802800
'main' =>
'temp' => float 29.14
1 =>
'dt' => int 1530813600
'main' =>
'temp' => float 25.63
...
array
monday => 27.65
tuesday => 24.65
...
我想达到的目标是:
array (size=40)
0 =>
'dt' => int 1530802800
'main' =>
'temp' => float 29.14
1 =>
'dt' => int 1530813600
'main' =>
'temp' => float 25.63
...
array
monday => 27.65
tuesday => 24.65
...
我可以创建两个单独的数组来保存所有日期和所有温度,但我不确定如何绑定与特定日期相关的所有温度,因为我可以让同一天在该数组中最多显示8次,然后计算当天的最高温度
我有点像:
0 => monday
1 => monday
2 => monday
3 => tuesday
另一个数组是:
0 => 23.56
1 => 34.66
2 => 12.44
3 => 34.44
我想要的是至少有这样的东西
monday => array(
0 => 23.56
1 => 34.66
2 => 12.44
),
tueasday => array(
0 => 34.56
1 => 34.66
2 => 13.44
)
...
希望这已经足够清楚了
感谢您的帮助
谢谢。现在您有了这个:
$days = ["0" => "monday",
"1" => "monday",
"2" => "monday",
"3" => "tuesday"];
$temps = [
0 => 23.56,
1 => 34.66,
2 => 12.44,
3 => 34.44
];
您可以这样做:
$result = [];
foreach($days as $key => $day){
if(!isset($result[$day]))
$result[$day] = $temps[$key];
if($temps[$key] > $result[$day])
$result[$day] = $temps[$key];
}
var_dump($result);
输出:
array(2) {
["monday"]=>
float(34.66)
["tuesday"]=>
float(34.44)
}
希望它能帮助您找到最佳解决方案。现在您有了:
$days = ["0" => "monday",
"1" => "monday",
"2" => "monday",
"3" => "tuesday"];
$temps = [
0 => 23.56,
1 => 34.66,
2 => 12.44,
3 => 34.44
];
您可以这样做:
$result = [];
foreach($days as $key => $day){
if(!isset($result[$day]))
$result[$day] = $temps[$key];
if($temps[$key] > $result[$day])
$result[$day] = $temps[$key];
}
var_dump($result);
输出:
array(2) {
["monday"]=>
float(34.66)
["tuesday"]=>
float(34.44)
}
希望它能帮助您找到最佳解决方案。根据您向我们展示的内容:
$days = array(
0 => 'monday',
1 => 'monday',
2 => 'monday',
3 => 'tuesday'
);
$temp = array(
0 => 23.56,
1 => 34.66,
2 => 12.44,
3 => 34.44
);
如果您确定有两个大小相同的数组:
$new_array = array();
foreach ($days as $key=> $day) {
$new_array[$day][] = $temp[$key];
}
var_dump($new_array);
输出为:
array (size=2)
'monday' => array (size=3)
0 => float 23.56
1 => float 34.66
2 => float 12.44
'tuesday' => array (size=1)
0 => float 34.44
array (size=2)
'monday' => float 34.66
'tuesday' => float 34.44
现在,如果您想要一个包含日期和每天最高温度的数组:
$result = array();
foreach($new_array as $day => $temp_array) {
$result[$day] = max($new_array[$day]);
}
var_dump($result);
输出为:
array (size=2)
'monday' => array (size=3)
0 => float 23.56
1 => float 34.66
2 => float 12.44
'tuesday' => array (size=1)
0 => float 34.44
array (size=2)
'monday' => float 34.66
'tuesday' => float 34.44
也许有更好的方法来实现它,但根据你的问题和你的要求,它应该做的工作,我希望它有帮助 根据您向我们展示的内容:
$days = array(
0 => 'monday',
1 => 'monday',
2 => 'monday',
3 => 'tuesday'
);
$temp = array(
0 => 23.56,
1 => 34.66,
2 => 12.44,
3 => 34.44
);
如果您确定有两个大小相同的数组:
$new_array = array();
foreach ($days as $key=> $day) {
$new_array[$day][] = $temp[$key];
}
var_dump($new_array);
输出为:
array (size=2)
'monday' => array (size=3)
0 => float 23.56
1 => float 34.66
2 => float 12.44
'tuesday' => array (size=1)
0 => float 34.44
array (size=2)
'monday' => float 34.66
'tuesday' => float 34.44
现在,如果您想要一个包含日期和每天最高温度的数组:
$result = array();
foreach($new_array as $day => $temp_array) {
$result[$day] = max($new_array[$day]);
}
var_dump($result);
输出为:
array (size=2)
'monday' => array (size=3)
0 => float 23.56
1 => float 34.66
2 => float 12.44
'tuesday' => array (size=1)
0 => float 34.44
array (size=2)
'monday' => float 34.66
'tuesday' => float 34.44
也许有更好的方法来实现它,但根据你的问题和你的要求,它应该做的工作,我希望它有帮助 从原始阵列开始(不是两个单独的阵列)。从时间戳中获取日期,并将其指定为结果的键。检查当前值是否小于,如果小于,则更换为新值:
foreach($array as $values) {
$day = strtolower(date('l', $values['dt']));
if(!isset($result[$day]) || $result[$day] < $values['main']['temp']) {
$result[$day] = $values['main']['temp'];
}
}
然后计算每天的最大值:
$max = array_map('max', $result);
从原始阵列(而不是两个单独的阵列)开始。从时间戳中获取日期,并将其指定为结果的键。检查当前值是否小于,如果小于,则更换为新值:
foreach($array as $values) {
$day = strtolower(date('l', $values['dt']));
if(!isset($result[$day]) || $result[$day] < $values['main']['temp']) {
$result[$day] = $values['main']['temp'];
}
}
然后计算每天的最大值:
$max = array_map('max', $result);
看起来要实现这一点,您缺少的概念是从键动态构造数组 如果迭代原始数组,请将时间戳转换为一天。你说过你已经知道怎么做了。然后将那天作为构建结果数组的关键
foreach ($data as $measurement) {
$day = however_you_convert($measurement['dt']);
// ↓ defines the group
$result[$day][] = $measurement['main']['temp'];
// ↑ adds the value to an array under that group
}
这将把您的数据转换为问题最后一个代码块中显示的分组结构。从那里,您可以使用排序
或最大值
获得最高值
如果您不需要这些值集,您可以在运行过程中跟踪最大值,如图所示。完成此任务所缺少的概念似乎是从关键点动态构建数组 如果迭代原始数组,请将时间戳转换为一天。你说过你已经知道怎么做了。然后将那天作为构建结果数组的关键
foreach ($data as $measurement) {
$day = however_you_convert($measurement['dt']);
// ↓ defines the group
$result[$day][] = $measurement['main']['temp'];
// ↑ adds the value to an array under that group
}
这将把您的数据转换为问题最后一个代码块中显示的分组结构。从那里,您可以使用排序
或最大值
获得最高值
如果您不需要这些值集,您可以在运行过程中跟踪最大值,如图所示。如果您向我们展示您使用的代码,我相信有人会为您提供一个快速解决方案,使您想要的输出共享您现有的代码,以便我们能够理解它并告诉您在哪里修改它。否则,如果您不将现有代码添加到问题中,我们可能会提出与当前方法不兼容的问题,您将面临关闭此问题的风险。如果您仍在监视此问题,请添加您的代码如果您向我们展示您使用的代码,我相信有人会给您提供一个快速修复,使您想要的输出共享您现有的代码,以便我们能够理解它并告诉您在何处修改它。否则,如果您不将现有代码添加到问题中,我们可能会提出与当前方法不兼容的问题,您将面临关闭此问题的风险。如果您仍在关注此问题,请添加您的代码谢谢您的努力,这很有帮助,我很感激。:)谢谢你的努力,这很有帮助,我很感激。:)如果有帮助,您可以向上投票/接受答案以表示感谢:)我已经向上投票了,但由于我的帐户是新的,我没有足够的声誉,因为投票没有公开显示,但stackoverflow说它们被记录了。:)如果有帮助,您可以向上投票/接受答案以表示感谢:)我已经向上投票了,但由于我的帐户是新的,我没有足够的声誉,因为投票没有公开显示,但stackoverflow说它们被记录了。:)