Професионална програма
Loading...
+ Нов въпрос
Tangrila avatar Tangrila 21 Точки

[PHP BASICS][9.Object to JSON String][RUNTIME ERROR]

 
<?php
if (isset($_GET['input']) && isset($_GET['delimiter'])) {
    $delimiter = $_GET['delimiter'];
    $input = $_GET['input'];
    $input = explode("\n", $input);
    $input = array_map('trim', $input);
    class Student
    {
        public $name;
        public $surname;
        public $age;
        public $grade;
        public $date;
        public $town;
        public function __construct($name, $surname, $age, $grade, $date, $town)
        {
            $this->name = $name;
            $this->surname = $surname;
            $this->age = $age;
            $this->grade = doubleval($grade);
            $this->date = $date;
            $this->town = $town;
        }
    };

    $data = [];
    for ($i = 0; $i < count($input); $i++) {
        $line = explode($delimiter, $input[$i]);
        $data[$line[0]] = $line[1];
    }

    $student = new Student(null, null, null, null, null, null);
    foreach ($data as $d => $val) {
        if ($d == "grade")
            $val = intval($val);
        $student->$d = $val;
    }
    echo json_encode($student, JSON_UNESCAPED_SLASHES);
}
?>

Judge-а дава RUNTIME ERROR на всеки тест. А с локални тестове никакъв проблем не дава.
Идеи?

Тагове:
0
Софтуерни технологии 02/07/2016 20:34:06
KrasimirPetkov avatar KrasimirPetkov 331 Точки

Може и да се бъркам (ако е така се извинявам), но в условието пише: "You will be given input lines holding information about an object in the form of key / valuе pairs.".

Никъде прочетох, че обектът трябва да бъде от тип Student. Оттам нататък решението е просто да се вземе масив от Key/Value Pairs и да ги запишеш в JSON обект.

Ето примерно решение: http://pastebin.com/dxyxLdj5

Успех със задачата!

0
03/07/2016 02:08:02
Tangrila avatar Tangrila 21 Точки

Да, но какъв е проблема да си използвам Student?

8-ма задача също ми е със Student, но няма проблем..

0
KrasimirPetkov avatar KrasimirPetkov 331 Точки

Не знам дали винаги въвеждат обекти от тип Student с полета Name, Surname, Age, Grade, Date и Town. Не съм гледал тестовете в Judge. Другият вариант е да ти дава грешка, защото използваш intval() вместо doubleval().

0
Tangrila avatar Tangrila 21 Точки

не, не, аз данните дето ги дават ги превеждам през стринг и ги вкарвам в масив data(key -> value) и него го ползвам, че да си създам студент-а във foreach и после просто изписвам json-а на ръчно направения ми Student.
И intval doubleval със и без тях пробвах пак същото дава. :/

0
Tanyo avatar Tanyo 152 Точки

Здравей, не е необходимо да превръщаш $data масива в клас и обекти.

Директно си печатай $data в json формат: echo json_encode($data, JSON_UNESCAPED_SLASHES);

След което обърни внимание на кастването от стринг към инт и дабъл на годините и оцекната... :)

0
Tangrila avatar Tangrila 21 Точки

Така и я реших. Просто ми е интересно защо онзи код не става, какво ли джъджа дава като грешка

0