<?php
/**
* PHP Challenge vol.6 - 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ą
*
* Do załadowania klasy użyj przestrzeni nazw, a nie require lub include,
* definiując odpowiednią funkcję w metodzie spl_autoload_register
*/
$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
spl_autoload_register(function($class){
$classArr = explode('\\', $class, 2);
if(isset($classArr[1])){
$class = str_replace('\\', '/', $classArr[1]);
$namespce = [
'App' => __DIR__.'/',
];
if(isset($namespce[$classArr[0]]))
{
$path = $namespce[$classArr[0]];
$file = $path.$class.'.php';
if (file_exists($file)) {
require_once($file);
}
}
}
}, true, true);
<?php
require('./autoloader.php');
use App\NamesParser;
/**
* Rozwiązanie
*/
$objParser = new NamesParser($data);
$out = $objParser->getNames('R');
var_dump($out);
<?php
namespace App;
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;
}
}