This is my result, but this is 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 can't create an array value in a class, how can I do that, 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>'; } }
The problem is with your student class.
Each time you call
takeLesson
you are overwriting thedata
propertySo it can be solved by using an array to store them like this