• Avatar de VincentPIEPLU
    Membre depuis :
    04/04/2015
    Messages :
    233

    Hello la communauté,

    J'ai un tableau de valeur comme celui ci-dessous et j'aimerais pouvoir faire des recherches de dates.

    array:3 [▼
    0 => array:3 [▼
    "start" => "2019-01-17 00:00:00"
    "end" => "2019-01-19 00:00:00"
    "price" => 60.0
    ]
    1 => array:3 [▼
    "start" => "2019-01-25 00:00:00"
    "end" => "2019-01-28 00:00:00"
    "price" => 80.0
    ]
    2 => array:3 [▼
    "start" => "2019-01-22 00:00:00"
    "end" => "2019-01-23 00:00:00"
    "price" => 100.0
    ]
    ]

    Par exemple, si je recherche la valeur
    2019-01-18, je dois pouvoir ressortir 60

    Si je recherche la valeur de "end" (exemple : 2019-01-23) ne doit pas ressortir comme recherche.

    Merci de votre aide.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2548

    Salut,

    Puisque tu disposes de collections et de Carbon avec Laravel autant les utiliser, voici un petit test que j'ai fait :

    $array = [
    [
    "start" => "2019-01-17 00:00:00",
    "end" => "2019-01-19 00:00:00",
    "price" => 60.0,
    ],
    [
    "start" => "2019-01-25 00:00:00",
    "end" => "2019-01-28 00:00:00",
    "price" => 80.0,
    ],
    [
    "start" => "2019-01-22 00:00:00",
    "end" => "2019-01-23 00:00:00",
    "price" => 100.0,
    ]
    ];

    $collection = collect($array);

    $date = Carbon::createFromFormat('Y-m-d H:i:s', '2019-01-18 00:00:00');

    $filtered = $collection->filter(function ($value, $key) use ($date) {
    $start = Carbon::createFromFormat('Y-m-d H:i:s', $value['start']);
    $end = Carbon::createFromFormat('Y-m-d H:i:s', $value['end']);
    return $date->greaterThanOrEqualTo($start) && $date->lessThanOrEqualTo($end);
    });

    dd($filtered);

    Ce qui me donne :

    Collection {#271 ▼
    #items: array:1 [▼
    0 => array:3 [▼
    "start" => "2019-01-17 00:00:00"
    "end" => "2019-01-19 00:00:00"
    "price" => 60.0
    ]
    ]
    }

Vous ne pouvez pas répondre à ce sujet.