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
@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 aecho
within thisif
, and it is certain that always enters.– Amanda Lima