Array in white - only removing half of them

1

I have the following array:

Array
(
    [0] => Array
        (
            [Produto] => ENH1264-1
            [Quantidade] => 1
        )

    [1] => Array
        (
            [Produto] => ENH1264-3
            [Quantidade] => 2
        )

    [2] => Array
        (
            [Produto] => ENH1264-4
            [Quantidade] => 3
        )

    [3] => Array
        (
            [Produto] => ENH1264-6
            [Quantidade] => 0
        )

    [4] => Array
        (
            [Produto] => ENH1264-5
            [Quantidade] => 0
        )

    [5] => Array
        (
            [Produto] => ENH1264-2
            [Quantidade] => 0
        )

    [6] => Array
        (
            [Produto] => ENH1266-3
            [Quantidade] => 0
        )

    [7] => Array
        (
            [Produto] => ENH1266-5
            [Quantidade] => 0
        )

    [8] => Array
        (
            [Produto] => ENH1266-4
            [Quantidade] => 0
        )

    [9] => Array
        (
            [Produto] => ENH1266-6
            [Quantidade] => 0
        )

    [10] => Array
        (
            [Produto] => ENH1266-1
            [Quantidade] => 0
        )

    [11] => Array
        (
            [Produto] => ENH1266-2
            [Quantidade] => 0
        )

    [12] => Array
        (
            [Produto] => ENH1267-6
            [Quantidade] => 0
        )

    [13] => Array
        (
            [Produto] => ENH1267-5
            [Quantidade] => 0
        )

    [14] => Array
        (
            [Produto] => ENH1267-4
            [Quantidade] => 0
        )

    [15] => Array
        (
            [Produto] => ENH1267-3
            [Quantidade] => 0
        )

    [16] => Array
        (
            [Produto] => ENH1267-2
            [Quantidade] => 0
        )

    [17] => Array
        (
            [Produto] => ENH1267-1
            [Quantidade] => 0
        )

    [18] => Array
        (
            [Produto] => ENH1268-6
            [Quantidade] => 0
        )

    [19] => Array
        (
            [Produto] => ENH1268-5
            [Quantidade] => 0
        )

    [20] => Array
        (
            [Produto] => ENH1268-4
            [Quantidade] => 0
        )

    [21] => Array
        (
            [Produto] => ENH1268-3
            [Quantidade] => 0
        )

    [22] => Array
        (
            [Produto] => ENH1268-2
            [Quantidade] => 0
        )

    [23] => Array
        (
            [Produto] => ENH1268-1
            [Quantidade] => 0
        )

    [24] => Array
        (
            [Produto] => ENH1364-6
            [Quantidade] => 0
        )

    [25] => Array
        (
            [Produto] => ENH1364-4
            [Quantidade] => 0
        )

    [26] => Array
        (
            [Produto] => ENH1364-3
            [Quantidade] => 0
        )

    [27] => Array
        (
            [Produto] => ENH1364-2
            [Quantidade] => 0
        )

    [28] => Array
        (
            [Produto] => ENH1364-1
            [Quantidade] => 0
        )

    [29] => Array
        (
            [Produto] => ENH1354-2
            [Quantidade] => 0
        )

    [30] => Array
        (
            [Produto] => ENH1354-3
            [Quantidade] => 0
        )

    [31] => Array
        (
            [Produto] => ENH1354-4
            [Quantidade] => 0
        )

    [32] => Array
        (
            [Produto] => ENH1354-6
            [Quantidade] => 0
        )

    [33] => Array
        (
            [Produto] => ENH1354-1
            [Quantidade] => 0
        )

    [34] => Array
        (
            [Produto] => ENH1355-2
            [Quantidade] => 0
        )

    [35] => Array
        (
            [Produto] => ENH1355-3
            [Quantidade] => 0
        )

    [36] => Array
        (
            [Produto] => ENH1355-4
            [Quantidade] => 0
        )

    [37] => Array
        (
            [Produto] => ENH1355-6
            [Quantidade] => 0
        )

    [38] => Array
        (
            [Produto] => ENH1355-1
            [Quantidade] => 0
        )

    [39] => Array
        (
            [Produto] => ENH1356-6
            [Quantidade] => 0
        )

    [40] => Array
        (
            [Produto] => ENH1356-4
            [Quantidade] => 0
        )

    [41] => Array
        (
            [Produto] => ENH1356-3
            [Quantidade] => 1
        )

    [42] => Array
        (
            [Produto] => ENH1356-2
            [Quantidade] => 2
        )

    [43] => Array
        (
            [Produto] => ENH1356-1
            [Quantidade] => 3
        )

)

I'm doing a check so that when the index has Quantity = 0, remove the array.

for($i = 0; $i < count($arrayMerging); $i++){

    if($arrayMerging[$i]['Quantidade'] == 0){

        unset($arrayMerging[$i]);

    }

}

However, it is only removing from [3] to [23], for some reason that I am not finding. There are still arrays from [24] through [40] to remove, not remove.

Am I doing something wrong?

Array
(
    [0] => Array
        (
            [Produto] => ENH1264-1
            [Quantidade] => 1
        )

    [1] => Array
        (
            [Produto] => ENH1264-3
            [Quantidade] => 2
        )

    [2] => Array
        (
            [Produto] => ENH1264-4
            [Quantidade] => 3
        )

    [24] => Array
        (
            [Produto] => ENH1364-6
            [Quantidade] => 0
        )

    [25] => Array
        (
            [Produto] => ENH1364-4
            [Quantidade] => 0
        )

    [26] => Array
        (
            [Produto] => ENH1364-3
            [Quantidade] => 0
        )

    [27] => Array
        (
            [Produto] => ENH1364-2
            [Quantidade] => 0
        )

    [28] => Array
        (
            [Produto] => ENH1364-1
            [Quantidade] => 0
        )

    [29] => Array
        (
            [Produto] => ENH1354-2
            [Quantidade] => 0
        )

    [30] => Array
        (
            [Produto] => ENH1354-3
            [Quantidade] => 0
        )

    [31] => Array
        (
            [Produto] => ENH1354-4
            [Quantidade] => 0
        )

    [32] => Array
        (
            [Produto] => ENH1354-6
            [Quantidade] => 0
        )

    [33] => Array
        (
            [Produto] => ENH1354-1
            [Quantidade] => 0
        )

    [34] => Array
        (
            [Produto] => ENH1355-2
            [Quantidade] => 0
        )

    [35] => Array
        (
            [Produto] => ENH1355-3
            [Quantidade] => 0
        )

    [36] => Array
        (
            [Produto] => ENH1355-4
            [Quantidade] => 0
        )

    [37] => Array
        (
            [Produto] => ENH1355-6
            [Quantidade] => 0
        )

    [38] => Array
        (
            [Produto] => ENH1355-1
            [Quantidade] => 0
        )

    [39] => Array
        (
            [Produto] => ENH1356-6
            [Quantidade] => 0
        )

    [40] => Array
        (
            [Produto] => ENH1356-4
            [Quantidade] => 0
        )

    [41] => Array
        (
            [Produto] => ENH1356-3
            [Quantidade] => 1
        )

    [42] => Array
        (
            [Produto] => ENH1356-2
            [Quantidade] => 2
        )

    [43] => Array
        (
            [Produto] => ENH1356-1
            [Quantidade] => 3
        )

)
    
asked by anonymous 07.12.2017 / 20:46

1 answer

1
  

This answer is based on version 5.4 of PHP

The problem is the language constructor unset() .

You can not know exactly why, because PHP itself does not limit the use of this constructor in its manual, but this problem happens when it is called several times. Take this test:

for($i = 0; $i < count($arrayMerging); $i++){

    echo $i."</br>";
    if($arrayMerging[$i]['Quantidade'] == 0){

       unset($arrayMerging[$i]);

    }

}

Notice that a break happens in the loop right at index 23.

What you can do is create a new array ( this php accepts in a good ), and use unset() to delete the old one:

$newArray = array();
    for($i = 0; $i < count($arrayMerging); $i++){
        echo $i."</br>";
        if($arrayMerging[$i]['Quantidade'] !== 0){

            $newArray[] = $arrayMerging[$i];

        }

    }
    unset($arrayMerging);
    print_r($newArray);
    
07.12.2017 / 22:23