Olen sen verran alussa tässä asiaa ja kysyn vinkkiä tai opastusta.
Yritän suodattaa CSV tiedostosta päivämäärä välillä tietoa. Eli esim. 2022-04-01 ja 2022-04-05. Yksittäisen päivämäärän kanssa onnistuu kyllä.
Minun koodi on:
use League\Csv\Reader; use League\Csv\Statement; require 'League/autoload.php'; $path = 'spot2.csv'; $csv = Reader::createFromPath($path, 'r'); $tmp = new SplTempFileObject(); foreach ($csv as $record) { $tmp->fputcsv($record); } $reader = Reader::createFromFileObject($tmp)->setHeaderOffset(0); $stmt = Statement::create() ->where(function($row) { return strpos($row['Date'], '2022-04-03') !== false; }); $result = $stmt->process($reader); $_SESSION["data"] = $result;
Jos joku voi antaa selkeä vinkin tai ohjeistuksen , kiitollinen siitä
Avain asiaan löytyy seuraavasta lausekkeestasi.
Tuohon perään tulee lisätä ehtoja, joiden mukaan haluat suodattaa. Käytä &&-operaattoria, esimerkiksi näin.
Vinkkinä, että tuolla tavalla muotoiltuihin päivämääriin voi PHP:ssä myös käyttää pienempi-kuin- ja suurempi-kuin-operaattoreita. Ne toimivat juuri kuten niiden odottaisikin toimivan. Tämä olisi suotavampaa kuin ehtojen yhdistäminen pitkäksi lausekkeeksi monella &&-operaattorilla.
Vertailuoperaattoreista voit lukea esimerkiksi täällä. Suurinpiirtein samalla tavalla toimivat C- ja PHP-kielissä.
Kiitos paljon vinkistä. Tuo itsekin kokeilin, mutta ei toimi.
$stmt = Statement::create() ->where(function($row) { return strpos($row['Date'], '2022-04-01') !== false && strpos($row['Date'], '2022-04-02') !== false; }); $result = $stmt->process($reader); echo json_encode($result);
palautta tyhjän taulukon []
Helpointa olisi varmaankin jos vertailuoperaattorit toimisivat esim.: 2022-04-01 <= 2022-04-05 tai vastaavaa.
Toinen vaihtoehto on jos tuo strpos needles saisi lukemaan Array.
&&-operaattori on muuten tuohon tapaukseen väärä. Olisi pitänyt kirjoittaa ||-operaattori. Eli ei JA, vaan TAI.
hessu007 kirjoitti:
Helpointa olisi varmaankin jos vertailuoperaattorit toimisivat esim.: 2022-04-01 <= 2022-04-05 tai vastaavaa.
Kyllä, tämä toimii.
Jep ||-operaattori, mutta ei <=
'2022-04-02') !== false <= strpos($row['Date'], '2022-04-04') !== false; });
antaa virheen editorissa false; }); false; jälkeen virhe: Expected: semicolon
eli luulen, että ei hyväksy <=
Eli miten toimisi niin, että valitsee päivät 2 päivämäärän välillä?
Siinä on syntaksivirhe. Jos korjaat sen, niin tuo menee kyllä läpi.
Mutta se olisi silti väärin. Tarkoitus olisi käyttää tuota operaattoria tähän tapaan.
$date >= "2022-04-01" && $date <= "2022-04-05"
Eli tuon tulos on tosi, kun päivämäärä on noiden kahden päivämäärän välissä.
vinkki ja apuja Tarkoitit:
Tämä ei nimittäin toimi
No niin ratkaistu näin (kuten opastitikin)
$dates = $row['Date'] >= "2022-04-02" && $row['Date'] <= "2022-04-04"; return $dates;
Kiitos
Aihe on jo aika vanha, joten et voi enää vastata siihen.