在PHP中将股票行情数据转换为OHLC

在PHP中将股票行情数据转换为OHLC,php,Php,在其他语言中有很多关于这方面的问题,但我在PHP中找不到任何东西。我有一个$trades数组,列有金额、价格和时间: $trades = array( array(87.23, 97.14, "2018-10-04 03:53:37"), array(376.81, 100.16, "2018-10-04 01:36:56"), array(343.17, 97.67, "2018-10-04 01:26:17"), array(291.31, 97.99, "2018-

在其他语言中有很多关于这方面的问题,但我在PHP中找不到任何东西。我有一个
$trades
数组,列有金额、价格和时间:

$trades = array(
  array(87.23,  97.14,  "2018-10-04 03:53:37"),
  array(376.81, 100.16, "2018-10-04 01:36:56"),
  array(343.17, 97.67,  "2018-10-04 01:26:17"),
  array(291.31, 97.99,  "2018-10-04 00:12:2"),
  array(60.47,  96.42,  "2018-10-03 18:08:30"),
  array(353.18, 94.04,  "2018-10-03 14:30:24"),
  array(490.11, 99.06,  "2018-10-03 11:24:48"),
  array(377.52, 96.06,  "2018-10-03 06:05:31"),
  array(99.04,  100.71, "2018-10-03 04:19:53"),
  array(339.67, 96.17,  "2018-10-03 02:35:42"),
  array(195.14, 94.93,  "2018-10-03 02:24:55"),
  array(230.45, 95.08,  "2018-10-02 15:29:07")
);
我认为按
对内部数组进行分组,并在每个组中找到第一个、最大值、最小值和最后一个
价格
值,将为每天提供所需的打开、高、低和关闭条目。我试图分组,但出现了错误

 foreach ($trades as $trade) {
  $trade[2] = date('m d', strtotime($trade[2]));
}

$tradeGrouped = array();
foreach ($trades as $trade) {
  $tradeGrouped[$trade[2]] = $trade;
}
我想要的是:

$ohlc = array(
  array("10-02", 95.08, 95.08, 95.08, 95.08),
  array("10-03", 100.71, 100.71, 94.04, 96.42)
  array("10-04", 97.99, 100.16, 97.14, 97.14)    
);

使用
$tradegroup[$trade[2]]
只保留每个日期的最后一个值

这将为每个日期创建一个包含多个交易的数组:

$groups = [];

foreach ($trades as $trade) {
    $date = date('m d', strtotime($trade[2]));
    // Use this to handle dates from multiple years.
    // $date = substr($trade[2], 0, 10);

    if (!array_key_exists($date, $groups)) {
        $groups[$date] = [];
    }

    $groups[$date][] = $trade;
}

这将直接创建组,而不改变输入。

如果您是从RDBMS(如MySQL)获取此数据,那么您可以在数据库级别轻松完成此操作,而不用在PHP中处理循环和数组。“获取错误”?有什么错误?我也没有测试过,但我觉得不错。如果OP想得到每天的第一个和最后一个值,不改变输入当然很重要。另外,不一定要说你应该在答案中包含这一点,但OP可能希望在组键中包含年份,以便在新年前后对日期进行正确排序。@Don't我保留了问题中的转换,但我同意应该包括这一年来处理多年的投入。谢谢你的回答!我试过了,但输出似乎不是我想要的(它每天只输出最后一个数组)。你能看一看吗?也许能帮我得到[10 04,O,H,L,C],[10 04,O,H,L,C]形式的理想OHLC@科韦布尔