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ć.