Ohjelma toimii hienosti kovakoodatulla muuttujalla
$X = array(0, 0, 10, 0, 10, 10, 5, 15, 0, 10);
Nyt pitäisi tuohon muuttujaan saada pisteet tiedostosta data.txt, jonka sisältö on muotoa
0, 0, 100, 0, 100, 100, 50, 150, 0, 100
eli pelkät arvot pilkuilla eriteltuna.
Mutta osaaminen tuntuu loppuvan.
Arvasit oikein! Ovat pisteitä, jotka muodostavat kuvion kaksiulotteisessa koordinaatistossa.
Tarkennuksena vielä
Dumppaa (var_dump) muuttujat ja katso, että mitä vikaa niissä on. Eiköhän se homma ala ratketa, kun pikkuisen debuggaat. Include-komento ei voi aiheuttaa herjaa sizeof-funktion väärinkäytöstä; se tulee sizeof-funktion kutsumisesta.
P.S. Älä käytä jotain ihmeellistä count-funktion aliasta vaan käytä aina funktiota count. Se tekee koodista selkeämpää.
$X = file ("teksti.txt"); string(39) "320,508,315,599,311,594,422,605,428,516" $X = array(320,508,315,599,311,594,422,605,428,516); int(320) int(508) jne
Eli tuo string pitäisi pystyä muuttamaan kokoelmaksi int-muotoisia lukuja.
PS. sizeof ja count osaavat laskea alkioiden määrän 10 oikein. Mutta käytän count.
$X = json_decode("[".file_get_contents("teksti.txt")."]");
Metabolixin ohjeen mukaan lopulta (melkein) toimii. Tuo edellyttää, että jokainen alkio (luku) on omalla rivillään ja rivin lopussa pilkku, mutta ei viimeisen luvn jälkeen. Todellinen data on rivitetty, mutta myös viimeisen luvun perässä on aina pilkku.
Hain ratkaisua tiedoston lukemisvaiheesta. Muuttujaan luetaan esim "320,", mutta se ei kelpaa, koska mukana on tuo pilkku, on string eikä int.
Lienee joku kaava, jolla string "320," saadaan muotoon int (320).
Tai sitten tiedoston viimeinen pilkku saadaan pois.
Varma purkkaratkaisu on se, että säännöllisellä lausekkeella haetaan kaikki luvut tiedostosta, olipa välissä mitä tahansa.
$text = file_get_contents("teksti.txt"); preg_match_all("/[0-9]+/", $text, $matches); $X = array_map("intval", $matches[0]);
Aihe on jo aika vanha, joten et voi enää vastata siihen.