Kolejna rozbudowa helpera Arr. Tym razem dodajemy metody merge2 oraz merge. Do dzieła.
Merge2 jest banalne w swojej prostocie:
<?php
class Arr{
//(...)
public static function merge2($arr1, $arr2){
return [...$arr1, ...$arr2];
}
}
$result = Arr::merge2([1,2,3], [4,5,6]);
print_r($result);
//[1,2,3,4,5,6]
Teraz merge:
<?php
class Arr{
//(...)
public static function merge2($arr1, $arr2){
return [...$arr1, ...$arr2];
}
public static function merge(){
$merged = Arr::merge2(func_get_arg(0), func_get_arg(1));
$num_args = func_num_args();
if($num_args === 2)
return $merged;
}
}
$result = Arr::merge([1,2,3], [4,5,6]);
print_r($result);
//[1,2,3,4,5,6]
Jeżeli liczba argumentów wynosi 2 to woła merge2 – a w zasadzie już ma wynik gotowy, bo już zawołał. Teraz co robić, gdy jest więcej argumentów:
<?php
class Arr{
//(...)
public static function merge2($arr1, $arr2){
return [...$arr1, ...$arr2];
}
public static function merge(){
$merged = Arr::merge2(func_get_arg(0), func_get_arg(1));
$num_args = func_num_args();
if($num_args === 2)
return $merged;
if($num_args > 2){
$cnt = 2;
while($cnt < $num_args){
$merged = static::merge2($merged, func_get_arg($cnt++));
}
}
return $merged;
}
}
$merged_many = Arr::merge([1,2,3], [4,5,6], [7,8,9], [10]);
print_r($merged_many);
//[1,2,3...10]
Logika nie jest przesadnie trudna, ale gdy już ją zrozumiemy, pora uprościć kod, bo na razie dodaliśmy bezmyślnie blok kodu nie patrząc na całość:
<?php
class Arr{
//(...)
public static function merge2($arr1, $arr2){
return [...$arr1, ...$arr2];
}
public static function merge(){
$merged = Arr::merge2(func_get_arg(0), func_get_arg(1));
$num_args = func_num_args();
if($num_args > 2){
$cnt = 2;
while($cnt < $num_args){
$merged = static::merge2($merged, func_get_arg($cnt++));
}
}
return $merged;
}
}
$result = Arr::merge([1,2,3], [4,5,6]);
print_r($result);
//[1,2,3,4,5,6]
$merged_many = Arr::merge([1,2,3], [4,5,6], [7,8,9], [10]);
print_r($merged_many);
//[1,2,3...10]
Helpera będziemy rozbudowywać.