Получить значение многомерного массива и объединить группу продуктов - PullRequest
0 голосов
/ 23 апреля 2019

Я создал многомерный массив, используя CSV-файл.Я получаю следующий массив:

Array
(
    [0] => Array
        (
            [0] => Product
            [1] => Price
            [2] => Quantity
            [3] => Date
        )

    [1] => Array
        (
            [0] => Teddybear
            [1] => 3.789,33
            [2] => 2
            [3] => 2018-08-14
        )

    [2] => Array
        (
            [0] => Teddybear
            [1] => 2.702,17
            [2] => 1
            [3] => 2018-02-17
        )

    [3] => Array
        (
            [0] => Table
            [1] => 2.932,29
            [2] => 5
            [3] => 2018-10-09
        )

    [4] => Array
        (
            [0] => Lamp
            [1] => 671,70
            [2] => 3
            [3] => 2018-12-11
        )

    [5] => Array
        (
            [0] => Teddybear
            [1] => 481,21
            [2] => 3
            [3] => 2018-03-24
        )

    [6] => Array
        (
            [0] => Table
            [1] => 456,52
            [2] => 3
            [3] => 2018-05-14
        )

    [7] => Array
        (
            [0] => Chair
            [1] => 2.960,20
            [2] => 2
            [3] => 2018-06-20
        )

    [8] => 
)

Мне нужно создать файл JSON, но перед этим мне нужно подсчитать все продукты и оборот в месяц

Я новичок / младшийPHP разработчик и я больше специализируюсь на WordPress, так что прости меня за мой плохой код и / или плохие практики.Я здесь, чтобы учиться.

Я действительно не знаю, как выбрать, например, всех плюшевых медведей.Я знаю, что мог бы сделать $csv[1][1];, чтобы выбрать оборот для первого тедибира.

1 Ответ

1 голос
/ 23 апреля 2019

хорошо, здесь должно быть все, что вам нужно, я сделал 3 функции, которые вы можете объединить в цепочку, чтобы получить то, что вам нужно, как в примере

$data=[
    ["Product","Price","Quantity","Date"], // <-- if you want to remove the header remove all the lines with this symbol *
    ["Teddybear",3789.33,2,"2018-08-14"],
    ["Teddybear",2702.17,1,"2018-02-17"],
    ["Table",2932.29,5,"2018-10-09"],
    ["Lamp",671.70,3,"2018-12-11"],
    ["Teddybear",481.21,3,"2018-03-24"],
    ["Table",45.52,3,"2018-05-14"],
    ["Chair",2960.20,2,"2018-06-20"]
];


function WhereFromColum($data,$colum,$equal){
    $ret=[];
    array_push($ret,$data[0]);  // *
    $colum = is_numeric($colum)?$colum:array_search($colum,$data[0]);
    for($i=1/* 0 if you remove the header to data*/;$i!=count($data);$i++)
        if ($data[$i][$colum]==$equal) 
            array_push($ret,$data[$i]);
    return $ret;
}

function CountFromColum($data,$colum){
    $ret=0;
    $colum = is_numeric($colum)?$colum:array_search($colum,$data[0]);
    for($i=1/* 0 if you remove the header to data*/;$i!=count($data);$i++)
        $ret+=$data[$i][$colum];
    return $ret;
}

function WhereFromColumData($data,$colum,$min,$max){
    $contractDateBegin = new DateTime($min);
    $contractDateEnd  = new DateTime($max);
    $ret=[];
    array_push($ret,$data[0]);  // *
    $colum = is_numeric($colum)?$colum:array_search($colum,$data[0]);
    for($i=1/* 0 if you remove the header to data*/;$i!=count($data);$i++){
        $paymentDate = new DateTime($data[$i][$colum]);
        if ($paymentDate->getTimestamp() > $contractDateBegin->getTimestamp() && 
            $paymentDate->getTimestamp() < $contractDateEnd->getTimestamp())
            array_push($ret,$data[$i]);
    }
    return $ret;
}


var_dump(WhereFromColum($data,"Product","Teddybear")); // get all Teddybear's Product
var_dump(CountFromColum($data,"Quantity")); // get all Quantity
var_dump(CountFromColum(WhereFromColum($data,"Product","Teddybear"),"Quantity"));  // get all Quantity of Teddybear's Product
var_dump(WhereFromColumData($data,"Date","2018-08-01","2018-12-01")); // get all between 2018-08-01 and 2018-12-01
var_dump(WhereFromColumData(WhereFromColum($data,"Product","Teddybear"),"Date","2018-08-01","2018-12-01")); // get all Teddybear's Product between 2018-08-01 and 2018-12-01

обычно я обычно не пишу код, но объясняю, как это сделать, но в вашем случае это было слишком сложно, поэтому, пожалуйста, внимательно прочитайте три функции и постарайтесь понять, как они работают, ps, если вы хотите улучшить свои навыки в php Я предлагаю вам поиграть с этими функциями и изменить их так, чтобы они подходили именно вам. когда вы понимаете, как они работают, вы также можете создать еще один с той же логикой вложения, который позволит вам создавать гораздо более сложные фильтры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...