PHP
array_filter($data, function($row) { return substr($row, 0, 1) === "a"; });
Kolekcijos
$data->filter(function($row) { return substr($row, 0, 1) === "a"; });
PHP
array_search(function($row) { return substr($row, 0, 1) === "a"; }, $data);
Kolekcijos
$data->search(function($row) { return substr($row, 0, 1) === "a"; });
PHP
array_map(function($row) { return "test"; }, $data);
Kolekcijos
$data->map(function($row) { return "test"; });
PHP
sort($data);
Kolekcijos
$data->sort();
PHP
foreach($loop as $item) { $doSomething = true; }
Kolekcijos
$data->each(function($row) { return "test"; });
PHP
array_reduce($data, function($carry, $row) { return $carry + strlen($row); });
Kolekcijos
$data->reduce(function($carry, $row) { return $carry + strlen($row); });
PHP
array_splice($data, count($data)/2);
Kolekcijos
$data->splice(count($data)/2);
Visi kartu (PHP)
$data = array_filter($data, function($row) { return substr($row, 0, 1) === "a"; }); $data = array_search(function($row) { return substr($row, 0, 1) === "a"; }, $data); $data = array_map(function($row) { return "test"; }, $data); sort($data); foreach($loop as $item) { $doSomething = true; } $sum = array_reduce($data, function($carry, $row) { return $carry + strlen($row); });
Visi kartu (kolekcijos)
$sum = $data->filter(function($row) { return substr($row, 0, 1) === "a"; })->search(function($row) { return substr($row, 0, 1) === "a"; })->map(function($row) { return "test"; })->sort() ->each(function($row) { return "test"; })->reduce(function($carry, $row) { return $carry + strlen($row); });
Palyginimas
Taikant tokį paprastą metodą, neatrodo, kad būtų didžiulis kompromisas dėl kiekvienos atskiros funkcijos skaitomumo, nors pažvelgę į pavyzdį, kai jums reikia juos visas pritaikyti vienam masyvui, aiškiai matote, kad tai yra daugiau glausta ir lengviau skaitoma, kai rinkinyje naudojami grandininiai metodai.
Kiekviename masyve buvo 100 000 atsitiktinių eilučių, o kiekvieną funkciją vykdžiau 100 kartų. Galų gale apskaičiavome visų atsakymo laikų vidurkį.
========== Tests Complete (ms) ========== php filter: 5.07 collect filter: 6.49 ======================= php search: 0.79 collect search: 0 ======================= php map: 3.45 collect map: 4.18 ======================= php sort: 25.27 collect sort: 11.18 ======================= php each: 1.03 collect each: 6.96 ======================= php reduce: 2.78 collect reduce: 7.75 ======================= php splice: 1 collect splice: 0.74 =======================
Filtras , žemėlapis , Foreach ir Reduce yra greitesni naudojant standartines PHP funkcijas. Foreach ir Reduce iš tikrųjų yra neįtikėtinai reikšmingi skirtumai. Paieška , rūšiavimas ir sujungimas rodo kolekciją kaip nugalėtoją, o Rūšiavimas iš tikrųjų sutaupo daug laiko.
Mano nuomone (ir tai tik nuomonė, pagrįsta šiais rezultatais), jei našumas kelia didžiulį susirūpinimą, aš tikrai pasilikčiau su standartine PHP funkcija Foreach kilpoms ir greičiausiai tokia pati, kai reikia Reduce . Jei reikia rūšiuoti didelius duomenų rinkinius, kolekcijos yra tinkamas būdas. Likusieji yra taip arti, kad atrodo, kad tai yra asmeninis pasirinkimas.
Akivaizdu, kad turėtumėte pasinaudoti šia informacija ir priimti pagrįstą sprendimą, tačiau, jei esate panašus į mane, manau, kad atsidursite kolekcijose dėl daugelio aukščiau išvardytų funkcijų. Tačiau manau, kad toliau naudosiu →each
ir →reduce
!