我确定标题有点含糊,但我希望示例可以更好地说明问题。
所以,我有一个包含40个结果列表的数组。在每个结果中,都有一个时间戳,我将其转换为特定的日期,例如“星期一”和温度。事实是,一天中最多可以有8个时间段。以及每个时期的温度。我必须以某种方式确定与该天相关的所有温度,以指定该天的最高温度。
因此,数组看起来像这样:
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
)
...
希望很清楚。
感谢您的帮助。
谢谢。
答案 0 :(得分:1)
从原始阵列(不是两个单独的阵列)开始。从时间戳记中获取日期并将其指定为结果的关键字。检查当前值是否较小,如果是,则替换为新值:
foreach($array as $values) {
$day = strtolower(date('l', $values['dt']));
if(!isset($result[$day]) || $result[$day] < $values['main']['temp']) {
$result[$day] = $values['main']['temp'];
}
}
您还可以创建一个按日期键入所有温度的数组:
foreach($array as $values) {
$day = strtolower(date('l', $values['dt']));
$result[$day][] = $values['main']['temp'];
}
然后计算每天的最大值:
$max = array_map('max', $result);
答案 1 :(得分:1)
您似乎缺少实现此目标的概念是根据键动态构造数组。
如果迭代原始数组,则将时间戳转换为一天。您已经说过您已经知道该怎么做。然后以当天作为构建结果数组的键。
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
}
这会将您的数据转换为问题中最后一个代码块中所示的分组结构。从那里,您可以使用sort
或max
来获得最高价值。
如果不需要这些值集,则可以随时跟踪最大值,如this other answer所示。
答案 2 :(得分:0)
现在您已经拥有了:
$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)
}
希望它可以帮助您获得最佳解决方案。
答案 3 :(得分:0)
根据您向我们展示的内容:
$days = array(
0 => 'monday',
1 => 'monday',
2 => 'monday',
3 => 'tuesday'
);
$temp = array(
0 => 23.56,
1 => 34.66,
2 => 12.44,
3 => 34.44
);
如果您确定有2个大小相同的数组:
$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
现在,如果您想要一个包含日期和每天最高温度的数组:
$result = array();
foreach($new_array as $day => $temp_array) {
$result[$day] = max($new_array[$day]);
}
var_dump($result);
输出为:
array (size=2)
'monday' => float 34.66
'tuesday' => float 34.44
也许有更好的方法来实现它,但是根据您的问题以及您要求它做什么,我希望它会有所帮助!