Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.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_Multidimensional Array - Fatal编程技术网

Php 将最高温度指定给多维数组中的特定日期

Php 将最高温度指定给多维数组中的特定日期,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我确信这个标题有点模糊,但我希望这个例子能更好地解释这个问题 因此,我有一个数组,其中包含40个结果的列表。在每个结果中,都有一个时间戳,我将其转换为特定的一天,如“星期一”和温度。问题是,一天中最多可以有8个时段。以及每个周期的温度。我必须根据当天的所有相关温度,确定如何设定某一天的最高温度 因此,数组看起来像这样: array (size=40) 0 => 'dt' => int 1530802800 'main' =>

我确信这个标题有点模糊,但我希望这个例子能更好地解释这个问题

因此,我有一个数组,其中包含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
...
我想达到的目标是:

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说它们被记录了。:)