<?php
/**
* PHP Challenge vol.5 - Pan od informatyki
*
* Napisz klasę która będzie zawierać imiona ze zmiennej $data
* oraz metodę która przyjmie jako parametr literę na jaką musi zaczynać się imię
* i zwróci tablicę imion, jednocześnie zmieniając pierwszą literę imienia na wielką
*/
$data = 'judyta; julia; kamila; karina; laura; lena; magdalena; maja; nadia; natalia; olga; oliwia; pamela; patrycja; regina; renata;
sabina; sandra; tamara; tatiana; urszula; weronika; wiesława; zofia; zuzanna; Żaneta; adam; bartłomiej; bartosz; cezary; cyprian;
damian; daniel; edward; emanuel; fabian; feliks; gabriel; gerard; henryk; herbert; ignacy; igor; jacek; jakub; kacper; kajetan; lech;
leon; maciej; maksymilian; nikodem; norbert; olaf; olgierd; patryk; paweł; radosław; rafał; sebastian; seweryn; tadeusz; teodor; wacław;
waldemar; zdzisław; zygmunt';
// Aby rozpocząć edycję kliknij w przycisk powyżej "Fork this"
// Aby uruchomić moje rozwiązanie należy odkomentować poniższą linijkę
// require('rozwiazanie.php');
<?php
class NamesParser {
private $namesString = '';
private $namesArray = [];
public function __construct($names){
$this->names = $names;
$list = $this->getNamesListFromString($this->names);
$this->namesArray = $this->upperFirstLetter($list);
}
/**
* Główna funkcja zwracająca listę wyfiltrowanych imion
*/
public function getNames($firstLetter){
return $this->filterLetterList($firstLetter);
}
/**
* Funkcja przetwarzająca ciąg imion w tablicę, jednocześnie usuwając białe znaki z początku i końca imienia
*/
private function getNamesListFromString($data, $separator = ';'){
$data = explode($separator, $data);
foreach($data as &$item){
$item = trim($item);
}
return $data;
}
/**
* Funkcja filtrująca listę i zostawiająca tylko imiona zaczynające się na wybraną literę
*/
private function filterLetterList($firstLetter){
$list = array_filter($this->namesArray, function($item) use ($firstLetter) {
return $item[0] == $firstLetter || $item[0] == strtoupper($firstLetter);
});
return $list;
}
/**
* Funkcja zmieniająca pierwszą literę imienia na wielką
*/
private function upperFirstLetter($data){
array_walk($data, function(&$item){
$item = ucfirst($item);
});
return $data;
}
}
/**
* Rozwiązanie
*/
$objParser = new NamesParser($data);
$out = $objParser->getNames('R');
var_dump($out);