我拥有前90天所有比特币价格的JSON。我试图只使用工作日价格,不包括周末价格。这就是我这样做的方式。你能告诉我我做错了什么或者指出了我正确的方向吗?
<?php
$string = file_get_contents("https://blockchain.info/charts/market-price?timespan=90days&format=json");
$btc_price = json_decode($string, true);
$allDays = $btc_price[values];
$weekends = array_filter($allDays[values][x], function($d) {
return (date('N', strtotime(date("Y-m-$d"))) >= 6);
});
$allDays[$year][$month] = array_diff($allDays[$year][$month], $weekends);
echo "<pre>";
print_r($allDays);
?>
答案 0 :(得分:2)
你很亲密。我做了一些改动才能让它发挥作用:
您应该过去所有的日子,而不是传入$allDays['values']['x']
。这样您就可以在不必执行array_diff
步骤的情况下删除每个周末。 $allDays['values']['x']
应为$allDays
。
array_filter
callable中的表达式错误。我不清楚你的意图是什么,但看起来你试图得到一周中的那一天并过滤掉它。这是一个很好的策略,但是你的实现并没有效果。您可以在日期中获取w
的星期几,并传递您从API中获得的unix时间戳。此外,检查大于6 是无效的,因为星期日是0。
$ weekendnds = array_filter($ allDays [values] [x],function($ d){ return(日期('N',strtotime(日期(“Y-m- $ d”)))&gt; = 6); });
应更改为:
$allDays = array_filter($allDays, function($d) {
return !(date('w', $d['x']) == 6 || date('w', $d['x']) == 0);
});
$allDays[values][x]
应该是$allDays['values']['x']
。这是完整的代码段,因此您有上下文:
<?php
$string = file_get_contents("https://blockchain.info/charts/market-price?timespan=90days&format=json");
$btc_price = json_decode($string, true);
$allDays = $btc_price['values'];
$allDays = array_filter($allDays, function($d) {
return !(date('w', $d['x']) == 6 || date('w', $d['x']) == 0);
});
// This is just done to reset the keys in the array. It's entirely optional.
$allDays = array_values($allDays);
echo "<pre>";
print_r($allDays);
?>