【问题标题】:Foreach loop through results from array items from current month [closed]Foreach 循环遍历当前月份数组项的结果[关闭]
【发布时间】:2019-08-21 10:46:36
【问题描述】:

修复它。

我正在尝试获取一个表格来显示当月销售的商品的结果。并创建总价值的总和

$currentMonth = date('m');

//Loop through data
foreach($data[$i] AS $api)
{   
    if ($data[$i]['date_created'] = $currentMonth)
    {   
        $orders[$i]['id'] = $data[$i]['id'];
        $orders[$i]['status'] = $data[$i]['status'];        
        $orders[$i]['date_created'] = $data[$i]['date_created'];
        $orders[$i]['total'] = $data[$i]['total'];
    }
    $i++;

    $sum += $data[$i]['total'];         
}   

现在我得到了可以追溯到去年 11 月的所有结果。

我试图实现的只是本月的结果,所以假设是 2019 年 8 月。

希望大家帮帮我

感谢大家的输入,我确实应该进行 $api 调用,但是我的数组直接从 0 开始,然后 json 结果开始以这种形式显示:

Array
(
    [0] => Array
        (
            [id] => 19778
            [date_created] => 2019-08-20T20:06:29
            [status] => processing
            [total] => 207.00
        )
    [1] => Array
        (
            [id] => 19704
            [date_created] => 2019-08-19T17:53:56
            [status] => processing
            [total] => 18.50
        )

我可以查询所有结果,但是现在我想根据当前月份进行过滤。

我有一个单独的 HTML 表格,用于执行 for 调用:

<? for($order_out = 0; $order_out < count($orders); $order_out++):
    $order_client = $order_out + 1; ?>
    <tr>
        <td><?=$order_client?></td> 
        <td><?=strftime("%d-%m-%Y" ,strtotime($orders[$order_out]['date_created']))?></td>                                          
        <td><?=$orders[$order_out]['id']?></a></td>                                         
        <td><?=$orders[$order_out]['status']?></td>                                             
        <td><?=$orders[$order_out]['total']?></td>                                              
    </tr>       
<? endfor; ?>   

【问题讨论】:

  • $data[$i]['date_created'] = $currentMonth 没有可比性,它是一个任务。 ===== 是比较。
  • 希望@LLJ97 的回答对您有所帮助。但我的疑问是,为什么你要在 foreach 循环中增加 $i。
  • @MuhammedShihabudeenLabbaA 是对的。您递增并且不使用 $api 变量,因此 foreach 循环基本上没有意义。你把它写成一个 for 循环。
  • 如果添加一个数组的小样本会更容易帮助
  • 哈!群集错字。这是一个很好的。

标签: php json foreach


【解决方案1】:

你在这里犯了一些错误。

1.

if ($data[$i]['date_created'] = $currentMonth)

您将$data[$i]['date_created'] 分配给$currentMonth,而不是比较这两个变量。

$a = $b操作一样,总是返回true(赋值成功)。

所以基本上这条线是做什么的:

if(true) { 
  $data[$i]['date_created'] = currentMonth;
  // rest of code
}

尝试将此行更改为

if ($data[$i]['date_created'] === $currentMonth)
  1. foreach 不太正确。您正在使用for 方法。在循环内部迭代$i,而不使用迭代元素$api

假设您的 $data$orders 共享相同的密钥,那么您的代码可能如下所示:

$currentMonth = date('m');
$sum = 0; // have some initial value

//Loop through data
foreach($data[$i] AS $i => $api)
{   
    if ($api['date_created'] === $currentMonth)
    {   
        $orders[$i]['id'] = $api['id'];
        $orders[$i]['status'] = $api['status'];        
        $orders[$i]['date_created'] = $api['date_created'];
        $orders[$i]['total'] = $api['total'];
    }

    $sum += $api['total'];         
}  

【讨论】:

    【解决方案2】:
    $currentMonth = date('m');
    
    //Loop through data
    foreach($data AS $api)
    {   
        $month_date_created = date("m",strtotime($api['date_created']));
        if ($month_date_created == $currentMonth)
        {   
            $orders['id'] = $api['id'];
            $orders['status'] = $api['status'];        
            $orders['date_created'] = $api['date_created'];
            $orders['total'] = $api['total'];
        }
        $order_out[] = $orders;
        $sum += $api['total'];         
    }
    

    在 foreach 循环中,您也可以获得数组数组。

    【讨论】:

    • 为什么 OP 在这里编辑答案?
    • @ml88,现在,在这个答案中,您在哪里检查条件?
    • 您仍然忽略了日期比较问题,即 2019-08-20T20:06:29 永远不会 == date('m') 这将是 08
    • 这看起来像是一个RABBIT HOLE 的问题。即无止境的变化和新的要求。当心
    • 你可以让它成为一个有用的答案,我想,如果你添加日期比较修复
    【解决方案3】:

    第一个问题是您在 if 条件中使用单个“=”。

    其次,您的 date_created 变量可能包含 d/m/y。因此从 date_created 中提取月份和年份部分,并将其与 current_date = date('m/y') 进行比较,以仅获取 2019 年 8 月的记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-09
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 2018-06-26
      相关资源
      最近更新 更多