Filter multidimensional array PHP

0

I have the following array.

Array
(
[54190] => Array
    (
        [Repartidor] => RETIRO ANDEN ANDEN
        [Productos] => Array
            (
                [CONFITES] => Array
                    (
                        [2000 - 0] => Array
                            (
                                [Desc] => KIT KAT
                                [Medida] => 36X41.5G
                            )
                        [3993 - 0] => Array
                            (
                                [Desc] => GALLETA COCO
                                [Medida] => 30 X 120 GRM
                            )
                    )
                [REFRIGERADOS] => Array
                    (
                        [1000 - 0] => Array
                            (
                                [Desc] => SEM CARAMELO POTE C/CCHA
                                [Medida] => 9X4X135
                            )
                    )
            )
    )
[54183] => Array
    (
        [Repartidor] => MIGUEL PEREZ (HIJO)
        [Productos] => Array
            (
                [TRADICIONAL] => Array
                    (
                        [200 - 0] => Array
                            (
                                [Desc] => CAFE TRADICION STICK CL
                                [Medida] => 77X172.8G
                            )
                    )
            )
    )
[54451] => Array
    (
        [Repartidor] => HUGO FRUGO.
        [Productos] => Array
            (
                [CONFITES] => Array
                    (
                        [3993 - 0] => Array
                            (
                                [Desc] => GALLETA COCO
                                [Medida] => 30 X 120 GRM
                            )
                    )
            )
    )
[54107] => Array
    (
        [Repartidor] => JAVIER M.
        [Productos] => Array
            (
                [CONFITES] => Array
                    (
                        [2001 - 0] => Array
                            (
                                [Desc] => GALLETA VAINILLA
                                [Medida] => 30 X 120 GRM
                            )
                    )
            )
    )
)

And I need to apply a filter to only show those arrangements that contain within the arrangement of [Products] the following codes '2000 - 0' or '2001 - 0' excluding the rest of the products as well.

Example of output:

Array
(
[54190] => Array
    (
        [Repartidor] => RETIRO ANDEN ANDEN
        [Productos] => Array
            (
                [CONFITES] => Array
                    (
                        [2000 - 0] => Array
                            (
                                [Desc] => KIT KAT
                                [Medida] => 36X41.5G
                            )
                    )
            )
    )
[54107] => Array
    (
        [Repartidor] => JAVIER M.
        [Productos] => Array
            (
                [CONFITES] => Array
                    (
                        [2001 - 0] => Array
                            (
                                [Desc] => GALLETA VAINILLA
                                [Medida] => 30 X 120 GRM
                            )
                    )
            )
    )
)

I hope you have understood the case and it is not so complicated, thanks:).

    
asked by Marcelo 07.12.2017 в 19:50
source

1 answer

0

try this.

$arrData = array(); //Este es el array que tienes actualmente

//ARREGLO DE CODIGOS DE PRODUCTOS PERMITIDOS
$arrCodigosPermitidos = array("2000 - 0", "2001 - 0");

//ARRAY DE SALIDA
$arrOutput = array();

//RECORRO EL ARRAY PRINCIPAL
foreach($arrData as $key => $val){

    //GUARDO EL VALOR DEL ARREGLO COMPLETO
    $arrOutput[$key] = $val;

    //RECORRO LOS PRODUCTOS
    foreach($val["Productos"] as $subkey => $subval){

        //OBTENGO EL CODIGO
        $keyTmp = key($subval);

        //SI NO EXISTE EN LOS CODIGOS BUSCADOS
        if(!in_array($keyTmp, $arrCodigosPermitidos)){

            //VERIFICO QUE EXISTA LA POSICION PARA NO TENER ERROR
            if(isset($arrOutput[$key]["Productos"][$subkey][$keyTmp])){

                //LO ELIMINO
                unset($arrOutput[$key]["Productos"][$subkey][$keyTmp]);

                //SI YA NO EXISTE OTRO CODIGO DENTRO DE LA CATEGORIA, LA ELIMINO
                if(count($arrOutput[$key]["Productos"][$subkey]) < 1){
                    unset($arrOutput[$key]["Productos"][$subkey]);
                }
            }
        };
    }
}

//Veo el nuevo array para validar si esta correcto
print_r("<pre>");
print_r($arrOutput);
print_r("</pre>");

Good luck friend.

    
answered by 07.12.2017 в 21:36