从阵列中删除周末

时间:2018-01-15 00:12:33

标签: php

我拥有前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);

?>

1 个答案:

答案 0 :(得分:2)

你很亲密。我做了一些改动才能让它发挥作用:

  1. 您应该过去所有的日子,而不是传入$allDays['values']['x']。这样您就可以在不必执行array_diff步骤的情况下删除每个周末。 $allDays['values']['x']应为$allDays

  2. array_filter callable中的表达式错误。我不清楚你的意图是什么,但看起来你试图得到一周中的那一天并过滤掉它。这是一个很好的策略,但是你的实现并没有效果。您可以在日期中获取w的星期几,并传递您从API中获得的unix时间戳。此外,检查大于6 是无效的,因为星期日是0。

    $ weekendnds = array_filter($ allDays [values] [x],function($ d){     return(日期('N',strtotime(日期(“​​Y-m- $ d”)))&gt; = 6); });

  3. 应更改为:

    $allDays = array_filter($allDays, function($d) {
        return !(date('w', $d['x']) == 6 || date('w', $d['x']) == 0);
    });
    
    1. 我清理了一些语法。访问数组键时,应将索引包装在引号中。 PHP试图将您的密钥作为常量中断,然后再回到预期的行为。 $allDays[values][x]应该是$allDays['values']['x']
    2. 这是完整的代码段,因此您有上下文:

      <?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);
      
      ?>