PHP function always returning NULL

Asked

Viewed 353 times

2

I have a function in PHP that is always returning NULL and I’m not able to understand why.

The variable I’m trying to return is a multidimensional array. When I give a var_dump in the variable it is with 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 the function but I can’t find.

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 it that:

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

The variable $correto is a multidimensional array. I am merging positions that contain 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)
    }
  }
}
  • You can put an example of the array you are injecting into the sff function. I think it’s because there is only one Return, that is, if you don’t enter the if($incremento==$parada) will always return null

  • @Miguel, I edited the question with an example. In this case, you will always enter if($increment==$stop) for any value of $correto. I put a echo within this if, and it is certain that always enters.

1 answer

2


Missing a Re-turn on else too. Try it this way:

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);
    }

}

I think you’re trying to call merge() recursively, for this you need to return the function with the new data defined in that same execution of the function

  • Thank you so much @Miguel, that’s right!

  • You’re welcome @Amandalima

Browser other questions tagged

You are not signed in. Login or sign up in order to post.