Bir yıllık özet içine tarihleri ​​içeren bir PHP dizi filtreleme

3 Cevap php

Ben bir PHP dizinin içeriğine göre belirli bir ay içinde işlemlerin bir özetini oluşturmak için bir yol arıyorum.

Intended outcome (excusing layout):

-------------------------------------------
|   December 2009    |         12         |
|   January  2010    |         02         |
|   February 2010    |         47         |
|   March    2010    |         108        |
|   April    2010    |         499        |
-------------------------------------------

Based on my array:

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
                )

        )

Ne olursa olsun ne denedim kesinlikle hiçbir şans yaşadım. Özellikle herhangi değişkenleri içermiyorsa ay ekleyerek.

3 Cevap

Bu istediğiniz özet olarak reducing veri dizisi için tipik bir durumdur.

$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);
$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']);
}

: neden olur

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

Ben de anlamak:

  1. 0 her eleman ayar bir dizi $A 12 elemanları ile, başlatılamıyor
  2. Lütfen dizinin üzerinde ve her değer için döngü $v ay $m $v['name'], $v['values'] elemanın sayısını hesaplamak ve bu add hesaplamak $A[$m] için eleman sayısı
  3. Güzel bir biçimlendirme ile $A içeriği yazdırmak

Bu ne ihtiyaç değilse, belki de beklenen çıkışı dizinizi uyan bir örnek vermek gerekir.