PHP function always returning NULL

2

I have a function in PHP that is always returning NULL and I can not understand why.

The variable I am trying to return is a multidimensional array. When I give var_dump to the variable it has the correct value, but the return by the function returns NULL. I tried to return a string, and also returns NULL. I know the problem is in the function but I can not find it.

The function:

function merge($correto, $incremento, $parada){


    $atual=$correto[$incremento];
    $anterior=$correto[$incremento-1];
    if($atual['produto']==$anterior['produto']){
        $correto[$incremento]=array_merge($atual, $anterior);
        unset($correto[$incremento-1]);
        $correto=array_values($correto);
    }else{
        $incremento++;
    }
    if($incremento==$parada){
         return $correto;
    }else{
        $parada=count($correto)-1;
        merge($correto, $incremento, $parada);
    }

}

I'm calling the function like this:

$resultado=merge($correto, 0, count($correto)-1);

The variable $correto is a multidimensional array. I am making a merge between positions that contains the same value for $correto['produto']

Example of variable $correto :

array(14) {
  [0]=>
  array(4) {
    ["produto"]=>
    string(7) "ABACAXI"
    ["medida"]=>
    string(8) "Unidades"
    ["valor"]=>
    float(5)
    ["2,2016"]=>
    array(2) {
      ["quant"]=>
      float(35)
      ["total"]=>
      float(175)
    }
  }
  [1]=>
  array(4) {
    ["produto"]=>
    string(11) "ACUCAR 5 KG"
    ["medida"]=>
    string(8) "Unidades"
    ["valor"]=>
    float(8.48)
    ["2,2016"]=>
    array(2) {
      ["quant"]=>
      float(13)
      ["total"]=>
      float(110.24)
    }
  }
  [2]=>
  array(4) {
    ["produto"]=>
    string(11) "ACUCAR 5 KG"
    ["medida"]=>
    string(8) "Unidades"
    ["valor"]=>
    float(8.48)
    ["1,2016"]=>
    array(2) {
      ["quant"]=>
      float(5)
      ["total"]=>
      float(42.4)
    }
  }
  [3]=>
  array(4) {
    ["produto"]=>
    string(11) "ACUCAR 5 KG"
    ["medida"]=>
    string(8) "Unidades"
    ["valor"]=>
    float(8.48)
    ["1,2015"]=>
    array(2) {
      ["quant"]=>
      float(11)
      ["total"]=>
      float(93.28)
    }
  }
  [4]=>
  array(4) {
    ["produto"]=>
    string(11) "ACUCAR 5 KG"
    ["medida"]=>
    string(8) "Unidades"
    ["valor"]=>
    float(8.48)
    ["2,2015"]=>
    array(2) {
      ["quant"]=>
      float(13)
      ["total"]=>
      float(110.24)
    }
  }
  [5]=>
  array(4) {
    ["produto"]=>
    string(20) "ALFACE CRESPA VERDE "
    ["medida"]=>
    string(8) "Unidades"
    ["valor"]=>
    float(2.5)
    ["2,2016"]=>
    array(2) {
      ["quant"]=>
      float(10)
      ["total"]=>
      float(25)
    }
  }
  [6]=>
  array(4) {
    ["produto"]=>
    string(16) "ALHO DESCASCADO "
    ["medida"]=>
    string(10) "Quilograma"
    ["valor"]=>
    float(18)
    ["2,2016"]=>
    array(2) {
      ["quant"]=>
      float(15)
      ["total"]=>
      float(270)
    }
  }
  [7]=>
  array(4) {
    ["produto"]=>
    string(9) "AMENDOIM "
    ["medida"]=>
    string(7) "Pacotes"
    ["valor"]=>
    float(8.15)
    ["2,2015"]=>
    array(2) {
      ["quant"]=>
      float(10)
      ["total"]=>
      float(81.5)
    }
  }
  [8]=>
  array(4) {
    ["produto"]=>
    string(9) "AMENDOIM "
    ["medida"]=>
    string(7) "Pacotes"
    ["valor"]=>
    float(8.15)
    ["1,2015"]=>
    array(2) {
      ["quant"]=>
      float(16)
      ["total"]=>
      float(130.4)
    }
  }
  [9]=>
  array(4) {
    ["produto"]=>
    string(9) "AMENDOIM "
    ["medida"]=>
    string(7) "Pacotes"
    ["valor"]=>
    float(8.15)
    ["1,2016"]=>
    array(2) {
      ["quant"]=>
      float(5)
      ["total"]=>
      float(40.75)
    }
  }
  [10]=>
  array(4) {
    ["produto"]=>
    string(9) "AMENDOIM "
    ["medida"]=>
    string(7) "Pacotes"
    ["valor"]=>
    float(8.15)
    ["2,2016"]=>
    array(2) {
      ["quant"]=>
      float(4)
      ["total"]=>
      float(32.6)
    }
  }
  [11]=>
  array(4) {
    ["produto"]=>
    string(14) "AMIDO DE MILHO"
    ["medida"]=>
    string(4) "Saco"
    ["valor"]=>
    float(47.58)
    ["2,2016"]=>
    array(2) {
      ["quant"]=>
      float(1)
      ["total"]=>
      float(47.58)
    }
  }
  [12]=>
  array(4) {
    ["produto"]=>
    string(14) "AMIDO DE MILHO"
    ["medida"]=>
    string(4) "Saco"
    ["valor"]=>
    float(47.58)
    ["2,2015"]=>
    array(2) {
      ["quant"]=>
      float(2)
      ["total"]=>
      float(95.16)
    }
  }
  [13]=>
  array(4) {
    ["produto"]=>
    string(14) "AMIDO DE MILHO"
    ["medida"]=>
    string(4) "Saco"
    ["valor"]=>
    float(47.58)
    ["1,2015"]=>
    array(2) {
      ["quant"]=>
      float(1)
      ["total"]=>
      float(47.58)
    }
  }
}
    
asked by anonymous 07.06.2016 / 12:21

1 answer

2

There is a return in else , too. Try this:

function merge($correto, $incremento, $parada){


    $atual=$correto[$incremento];
    $anterior=$correto[$incremento-1];
    if($atual['produto']==$anterior['produto']){
        $correto[$incremento]=array_merge($atual, $anterior);
        unset($correto[$incremento-1]);
        $correto=array_values($correto);
    }else{
        $incremento++;
    }
    if($incremento==$parada){
        return $correto;
    }else{
        $parada=count($correto)-1;
        return merge($correto, $incremento, $parada);
    }

}

It seems to me that you want to call merge() recursively, so you need to return the function with the new data defined in that same function execution

    
07.06.2016 / 12:31