Advertisement
Guest User

Prison.php

a guest
Nov 22nd, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.60 KB | None | 0 0
  1. <?php
  2.  
  3.  
  4. class Prison
  5. {
  6.     private $prisoners;
  7.  
  8.     /**
  9.      * Prisoner constructor.
  10.      * @param array $prisoners
  11.      */
  12.     public function __construct($prisoners = [])
  13.     {
  14.         $this->prisoners = $prisoners;
  15.     }
  16.  
  17.     /**
  18.      * Voegt een nieuwe prisoner toe aan de lijst.
  19.      * @param Prisoner $prisoner
  20.      */
  21.     public function addPrisoner(Prisoner $prisoner)
  22.     {
  23.         // TODO: Check of de prisoner al in de lijst zit.
  24.         $this->prisoners[] = $prisoner;
  25.     }
  26.  
  27.     /**
  28.      * Geeft de lijst met prisoners terug.
  29.      * @return array
  30.      */
  31.     public function getAllPrisoners()
  32.     {
  33.         return $this->prisoners;
  34.     }
  35.  
  36.     /**
  37.      * Geeft een lijst met prisoners terug die ouder zijn dan de opgegeven leeftijd.
  38.      * @param int $age
  39.      * @return mixed
  40.      */
  41.     public function getAllPrisonersOlderThan(int $age)
  42.     {
  43.         return array_filter($this->prisoners, function(Prisoner $prisoner) use ($age) {
  44.            return $prisoner->getAge() > $age;
  45.         });
  46.     }
  47.  
  48.     /**
  49.      * Geeft een lijst met prisoners terug waarvan de crime hetzelfde is als de opgegeven parameter.
  50.      * @param string $crime
  51.      * @return array
  52.      */
  53.     public function getAllPrisonersByCrime(string $crime)
  54.     {
  55.         return array_filter($this->prisoners, function(Prisoner $prisoner) use($crime) {
  56.             return strtolower($prisoner->getCrime()) === strtolower($crime);
  57.         });
  58.     }
  59.  
  60.     /**
  61.      * Geeft een lijst terug met prisoners die in solitary zijn/ zitten.
  62.      */
  63.     public function getAllPrisonersInSolitary()
  64.     {
  65.         return array_filter($this->prisoners, function(Prisoner $prisoner) {
  66.            return $prisoner->isInSolitary();
  67.         });
  68.     }
  69.  
  70.     /**
  71.      * Geeft een lijst terug met alle prisoners ouder dan de opgegeven leeftijd in solitary.
  72.      * @param int $age
  73.      * @return array
  74.      */
  75.     public function getAllPrisonersInSolitaryOlderThan(int $age)
  76.     {
  77.         return array_filter($this->prisoners, function(Prisoner $prisoner) use($age) {
  78.             return $prisoner->isInSolitary() && $prisoner->getAge() > $age;
  79.         });
  80.     }
  81.  
  82.     /**
  83.      * Geeft de gemiddelde leeftijd van alle prisoners terug.
  84.      * @return int
  85.      */
  86.     public function getAveragePrisonerAge()
  87.     {
  88.         // Verplaats alle array values met de waarde voor de age van een prisoner.
  89.         $prisonerAges = array_map(function (Prisoner $prisoner) {
  90.             return $prisoner->getAge();
  91.         }, $this->prisoners);
  92.  
  93.         $addedAges = array_sum($prisonerAges);
  94.         $totalPrisonerCount = array_count_values($this->prisoners);
  95.  
  96.         return ($totalPrisonerCount / $addedAges);
  97.     }
  98.  
  99.     /**
  100.      * Voegt prisoners toe aan de lijst met prisoners via een array.
  101.      * @param array $prisoners
  102.      */
  103.     public function addPrisonersFromArray(array $prisoners)
  104.     {
  105.         foreach ($prisoners as $prisoner)
  106.         {
  107.             $this->addPrisoner($prisoner);
  108.         }
  109.     }
  110.  
  111.     /**
  112.      * Verwijdert een prisoner uit de lijst gebaseerd op de naam.
  113.      * @param $prisonerName
  114.      * @return mixed|null
  115.      */
  116.     public function removePrisonerByName(string $prisonerName)
  117.     {
  118.         $foundPrisoner = null;
  119.  
  120.         foreach ($this->prisoners as $index => $prisoner)
  121.         {
  122.             if ($prisoner->getName() === $prisonerName) {
  123.                 $foundPrisoner = $prisoner;
  124.  
  125.                 // Verwijder de prisoner uit de lijst.
  126.                 unset($this->prisoners[$index]);
  127.                 break;
  128.             }
  129.         }
  130.  
  131.         return $foundPrisoner;
  132.     }
  133.  
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement