Home > Software design >  how to get value from repeated call function with different parameter in php
how to get value from repeated call function with different parameter in php

Time:05-27

this is my result, but this not my expectation

Name : YOUR_NAME
Lesson : Algorithm and Programming
Total duration : 3
Room : A17
Lecturer : Ikhsan Permadi
Day : Monday, Thursday
Building : South Block

Name : YOUR_NAME
Lesson : Data Structure 2
Total duration : 2
Room : B10
Lecturer : Faisal Sulhan
Day : Wednesday
Building : North Block

Name : YOUR_NAME
Lesson : Data Structure 2
Total duration : 2
Room : B10
Lecturer : Faisal Sulhan
Day : Wednesday
Building : North Block 

I cannot make an array value in lesson how can i do that thing, and this is my expected output

// Output
// ================================================

// Name: YOUR_NAME
// Lesson: Algorithm and Programming
// Total duration: 3 SKS
// Room: A17
// Lecturer: Ikhsan Permadi
// Day: Monday, Thursday
// Building: South Block


// Name: YOUR_NAME
// Lesson: Artificial Intelligence, Data Structure 2
// Total duration: 5 SKS
// Room: B12, B10
// Lecturer: Ikhsan Permadi, Faisal Sulhan
// Day: Thursday, Wednesday
// Building: North Block


// Name: YOUR_NAME
// Lesson: Algorithm and Programming, Advanced Database, Artificial Intelligence, Data Structure 2
// Total duration: 12 SKS
// Room: A17, B12, B10
// Lecturer: Ikhsan Permadi, Faisal Sulhan
// Day: Monday, Thursday, Tuesday, Wednesday
// Building: South Block, North Block

$student = new Student;
$student->takeLesson('Algorithm and Programming');

$student->getLessonSummary();

$student = new Student;
$student->takeLesson('Artificial Intelligence');
$student->takeLesson('Data Structure 2');

$student->getLessonSummary();

$student = new Student;
$student->takeLesson('Algorithm and Programming');
$student->takeLesson('Advanced Database');
$student->takeLesson('Artificial Intelligence');
$student->takeLesson('Data Structure 2');

$student->getLessonSummary();

class Lesson
{   
    public function getDetail($lessonName)
    {
        $details = [
            [
                'name' => 'Algorithm and Programming',
                'lecturer' => 'Ikhsan Permadi',
                'room' => 'A17',
                'schedule' => [
                    [
                        'day'=> 'Monday',
                        'duration'=> '2 SKS'
                    ],
                    [
                        'day'=> 'Thursday',
                        'duration'=> '1 SKS'
                    ]
                ]
            ],
            [
                'name' => 'Advanced Database',
                'lecturer' => 'Faisal Sulhan',
                'room' => 'B12',
                'schedule' => [
                    [
                        'day'=> 'Tuesday',
                        'duration'=> '2 SKS'
                    ],
                    [
                        'day'=> 'Thursday',
                        'duration'=> '2 SKS'
                    ]
                ]
            ],
            [
                'name' => 'Artificial Intelligence',
                'lecturer' => 'Ikhsan Permadi',
                'room' => 'B12',
                'schedule' => [
                    [
                        'day'=> 'Thursday',
                        'duration'=> '3 SKS'
                    ]
                ]
            ],
            [
                'name' => 'Data Structure 2',
                'lecturer' => 'Faisal Sulhan',
                'room' => 'B10',
                'schedule' => [
                    [
                        'day'=> 'Wednesday',
                        'duration'=> '2 SKS'
                    ]
                ]
            ],
        ];
        foreach ($details as $key => $detail) {
            if ($detail['name'] == $lessonName) {
                return $details[$key];
            }
        }
    }
}

class Room
{
    public function getBuilding($roomName)
    {
        $details = [
            'A17' => 'South Block',
            'B12' => 'North Block',
            'B10' => 'North Block'
        ];

        // sleep(2);

        return $details[$roomName];
    }
}

   
class Student
{
    public function takeLesson($lessonName)
    {   
        $lesson = new Lesson;
        $lesson = $lesson->getDetail($lessonName);

        
        $dataLesson = $lesson['name'];        
        
       
        $totalDuration = array();
        $days = array();
        foreach($lesson['schedule'] as $schedule){
            $totalDuration[] = $schedule['duration'];
            $days[] = $schedule['day'];
        }

        $day = implode(", ", $days);

        $totalDuration = array_sum($totalDuration);

        $building = new Room;
        $building = $building->getBuilding($lesson['room']);
       
        $this->data = [
            "Name" => "YOUR_NAME",
            "Lesson" => $dataLesson,
            "Total duration"=> $totalDuration,
            "Room" => $lesson['room'],
            "Lecturer" => $lesson['lecturer'],
            "Day" => $day,
            "Building" => $building           
            ];
        
    }

    public function getLessonSummary()
    {
        $data = $this->data;
        list() = multiple();

        foreach ($data as $key => $value) {
            if("array" == gettype($value)){
                $value= json_encode($value);
            }
            echo "$key : $value\n";
            echo '<br>';
        }      
        echo '<br>';
        

    }
}

CodePudding user response:

the problem is in your student class.

Every time you call takeLesson your overwrite your data attribute

So you can solve it by using an array to store them like this

class Student
{
    private $data = [];

    public function takeLesson($lessonName)
    {   
        $lesson = new Lesson;
        $lesson = $lesson->getDetail($lessonName);

        
        $dataLesson = $lesson['name'];        
        
       
        $totalDuration = array();
        $days = array();
        foreach($lesson['schedule'] as $schedule){
            $totalDuration[] = $schedule['duration'];
            $days[] = $schedule['day'];
        }

        $day = implode(", ", $days);

        $totalDuration = array_sum($totalDuration);

        $building = new Room;
        $building = $building->getBuilding($lesson['room']);
       
        $this->data[] = [
            "Name" => "YOUR_NAME",
            "Lesson" => $dataLesson,
            "Total duration"=> $totalDuration,
            "Room" => $lesson['room'],
            "Lecturer" => $lesson['lecturer'],
            "Day" => $day,
            "Building" => $building           
            ];
        
    }

    public function getLessonSummary()
    {
        $dataArray = $this->data;
        list() = multiple();

        foreach($dataArray as $data) {
            foreach ($data as $key => $value) {
                if("array" == gettype($value)){
                    $value= json_encode($value);
                }
                echo "$key : $value\n";
                echo '<br>';
            }      
            echo '<br>';
        }
    }
}
  • Related