Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Datetime - Fatal编程技术网

将包含日期的PHP数组筛选到年度摘要中

将包含日期的PHP数组筛选到年度摘要中,php,arrays,datetime,Php,Arrays,Datetime,我正在研究一种基于PHP数组内容在某个月内创建事务摘要的方法 预期结果(免除布局): ------------------------------------------- | December 2009 | 12 | | January 2010 | 02 | | February 2010 | 47 | | March 2010 |

我正在研究一种基于PHP数组内容在某个月内创建事务摘要的方法

预期结果(免除布局):

-------------------------------------------
|   December 2009    |         12         |
|   January  2010    |         02         |
|   February 2010    |         47         |
|   March    2010    |         108        |
|   April    2010    |         499        |
-------------------------------------------
Array
(
    [0] => Array
        (
            [name] => 2009-10-23
            [values] => Array
                (
                    [0] => INzY2MTI4ZWM4OGRm
                )

        )

    [1] => Array
        (
            [name] => 2009-10-26
            [values] => Array
                (
                    [0] => IYmIzOWNmMmU3OWQz
                )

        )

    [2] => Array
        (
            [name] => 2009-11-23
            [values] => Array
                (
                    [0] => INTg4YzgxYWU1ODkx
                    [1] => IMjhkNDZkY2FjNDhl
                )

        )

    [3] => Array
        (
            [name] => 2009-11-24
            [values] => Array
                (
                    [0] => INTg4YzgxYWU1ODkx
                    [1] => INTg4YzgxYWU1ODkx
                )

        )

    [4] => Array
        (
            [name] => 2009-12-01
            [values] => Array
                (
                    [0] => IMWFiODk5ZjU1OTFk
                )

        )
基于我的数组:

-------------------------------------------
|   December 2009    |         12         |
|   January  2010    |         02         |
|   February 2010    |         47         |
|   March    2010    |         108        |
|   April    2010    |         499        |
-------------------------------------------
Array
(
    [0] => Array
        (
            [name] => 2009-10-23
            [values] => Array
                (
                    [0] => INzY2MTI4ZWM4OGRm
                )

        )

    [1] => Array
        (
            [name] => 2009-10-26
            [values] => Array
                (
                    [0] => IYmIzOWNmMmU3OWQz
                )

        )

    [2] => Array
        (
            [name] => 2009-11-23
            [values] => Array
                (
                    [0] => INTg4YzgxYWU1ODkx
                    [1] => IMjhkNDZkY2FjNDhl
                )

        )

    [3] => Array
        (
            [name] => 2009-11-24
            [values] => Array
                (
                    [0] => INTg4YzgxYWU1ODkx
                    [1] => INTg4YzgxYWU1ODkx
                )

        )

    [4] => Array
        (
            [name] => 2009-12-01
            [values] => Array
                (
                    [0] => IMWFiODk5ZjU1OTFk
                )

        )
无论我做了什么尝试,我都一无所获。特别是添加不包含任何变量的月份。

如果我理解清楚:

  • 用12个元素初始化数组
    $A
    ,将每个元素设置为
    0
  • 在数组上循环,并为每个值
    $v
    计算
    $v['name']
    的月份
    $m
    ,计算
    $v['values']
    中的元素数,并将该元素数添加到
    $A[$m]
  • 以良好的格式打印
    $A
    的内容
  • 如果这不是您需要的,也许您需要给出一个示例,说明预期输出与阵列匹配。

    如果我理解得很好:

    $summary = array();
    foreach($transactions as $t)
    {
        $month = substr($t['name'], 0, 7);
        if(!isset($summary[$month]))
            $summary[$month] = 0;
    
        if(isset($t['values']))
            $summary[$month] += count($t['values']);
    }
    
  • 用12个元素初始化数组
    $A
    ,将每个元素设置为
    0
  • 在数组上循环,并为每个值
    $v
    计算
    $v['name']
    的月份
    $m
    ,计算
    $v['values']
    中的元素数,并将该元素数添加到
    $A[$m]
  • 以良好的格式打印
    $A
    的内容
  • 如果这不是您需要的,那么您可能需要给出一个示例,其中预期输出与您的数组匹配

    $summary = array();
    foreach($transactions as $t)
    {
        $month = substr($t['name'], 0, 7);
        if(!isset($summary[$month]))
            $summary[$month] = 0;
    
        if(isset($t['values']))
            $summary[$month] += count($t['values']);
    }
    
    将导致:

    Array
    (
        [2009-10] => 2
        [2009-11] => 4
        [2009-12] => 1
    )
    
    将导致:

    Array
    (
        [2009-10] => 2
        [2009-11] => 4
        [2009-12] => 1
    )
    

    这是将数据数组放入所需摘要的典型情况

    $data = array(
        array('name' => '2009-10-23', 'values' => array('INzY2MTI4ZWM4OGRm')),
        array('name' => '2009-10-26', 'values' => array('IYmIzOWNmMmU3OWQz')),
        array('name' => '2009-11-23', 'values' => array('INTg4YzgxYWU1ODkx', 'IMjhkNDZkY2FjNDhl')),
        array('name' => '2009-11-24', 'values' => array('INTg4YzgxYWU1ODkx', 'INTg4YzgxYWU1ODkx')),
        array('name' => '2009-12-01', 'values' => array('IMWFiODk5ZjU1OTFk'))
    );
    
    function count_by_month($reduced, $current) {
        $month = date('F Y', strtotime($current['name']));
    
        if ( ! isset($reduced[$month])) {
            $reduced[$month] = 0;
        }
    
        $reduced[$month] += count($current['values']);
    
        return $reduced;
    }
    
    // Take the data array and return an array of
    // month (key) and transaction count for that month (value)
    $counts = array_reduce($data, 'count_by_month');
    
    print_r($counts);
    

    这是将数据数组放入所需摘要的典型情况

    $data = array(
        array('name' => '2009-10-23', 'values' => array('INzY2MTI4ZWM4OGRm')),
        array('name' => '2009-10-26', 'values' => array('IYmIzOWNmMmU3OWQz')),
        array('name' => '2009-11-23', 'values' => array('INTg4YzgxYWU1ODkx', 'IMjhkNDZkY2FjNDhl')),
        array('name' => '2009-11-24', 'values' => array('INTg4YzgxYWU1ODkx', 'INTg4YzgxYWU1ODkx')),
        array('name' => '2009-12-01', 'values' => array('IMWFiODk5ZjU1OTFk'))
    );
    
    function count_by_month($reduced, $current) {
        $month = date('F Y', strtotime($current['name']));
    
        if ( ! isset($reduced[$month])) {
            $reduced[$month] = 0;
        }
    
        $reduced[$month] += count($current['values']);
    
        return $reduced;
    }
    
    // Take the data array and return an array of
    // month (key) and transaction count for that month (value)
    $counts = array_reduce($data, 'count_by_month');
    
    print_r($counts);