viernes, 17 de mayo de 2019

funcion convertir cadena print_r a arreglo


Función print_r a arreglo


Les comparto esta función que permite pasar de una cadena generada de print_r hacia un arreglo


modo de uso


$cadena="Array
(
    [PAC] => Array
        (
            [usuario] => DEMO700101XXX
            [pass] => DEMO700101XXX
            [produccion] => NO
        )

    [conf] => Array
        (
            [cer] => ../../certificados/lan7008173r5.cer.pem
            [key] => ../../certificados/lan7008173r5.key.pem
            [pass] => 12345678a
        )

    [version_cfdi] => 3.3
    [cfdi] => C:\SDK2\timbrados\ejemplo_arrendamiento.xml
    [xml_debug] => C:\SDK2\timbrados\debug_ejemplo_arrendamiento.xml
    [php_openssl] => SI
    [factura] => Array
        (
            [serie] => A
            [folio] => 100
            [fecha_expedicion] => 2019-05-10T09:10:19
            [metodo_pago] => PUE
            [forma_pago] => 01
            [tipocomprobante] => I
            [moneda] => MXN
            [tipocambio] => 1.0
            [LugarExpedicion] => 27000
            [RegimenFiscal] => 601
            [subtotal] => 1000
            [total] => 840
        )

    [emisor] => Array
        (
            [rfc] => LAN7008173R5
            [nombre] => ACCEM SERVICIOS EMPRESARIALES SC
        )

    [receptor] => Array
        (
            [rfc] => SOHM7509289MA
            [nombre] => MIGUEL ANGEL SOSA HERNANDEZ
            [UsoCFDI] => P01
        )

    [conceptos] => Array
        (
            [0] => Array
                (
                    [ClaveProdServ] => 84111506
                    [cantidad] => 1
                    [unidad] => NO APLICA
                    [ClaveUnidad] => ACT
                    [descripcion] => RENTA DE OFICINA MAYO 2014
                    [valorunitario] => 1000.00
                    [importe] => 1000.00
                    [CuentaPredial] => Array
                        (
                            [Numero] => 12345678
                        )

                    [Impuestos] => Array
                        (
                            [Traslados] => Array
                                (
                                    [0] => Array
                                        (
                                            [Base] => 1000.00
                                            [Impuesto] => 002
                                            [TasaOCuota] => 0.160000
                                            [Importe] => 160.00
                                            [TipoFactor] => Tasa
                                        )

                                )

                            [Retenciones] => Array
                                (
                                    [0] => Array
                                        (
                                            [Impuesto] => 002
                                            [Importe] => 160.00
                                            [Base] => 1000.00
                                            [TasaOCuota] => 0.160000
                                            [TipoFactor] => Tasa
                                        )

                                    [1] => Array
                                        (
                                            [Impuesto] => 001
                                            [Importe] => 160.00
                                            [Base] => 1000.00
                                            [TasaOCuota] => 0.160000
                                            [TipoFactor] => Tasa
                                        )

                                )

                        )

                )

        )

    [impuestos] => Array
        (
            [TotalImpuestosTrasladados] => 160.00
            [TotalImpuestosRetenidos] => 320.00
            [translados] => Array
                (
                    [0] => Array
                        (
                            [Impuesto] => 002
                            [TasaOCuota] => 0.160000
                            [Importe] => 160.00
                            [TipoFactor] => Tasa
                        )

                )

            [retenciones] => Array
                (
                    [0] => Array
                        (
                            [Impuesto] => 002
                            [importe] => 160.00
                        )

                    [1] => Array
                        (
                            [impuesto] => 001
                            [importe] => 160.00
                        )

                )

        )

)";

$arreglo=print_r_reverza($cadena);

y listo....

IMPORTANTE: esta primer version no es compatible si el valor tiene  comillas, parentesis, palabra array , llaves o [ ]




function print_r_reverza($cadena)
{
    $cadena=str_replace("\r",'',$cadena);
    $renglones=explode("\n",$cadena);
    $linea_con_coma=true;
    $cadena_final='$datos=';
    foreach($renglones AS $renglon)
    {
        if(strlen($renglon)<1)
            continue;
           
            if($renglon=='(' OR $renglon==')' OR $renglon=='Array' )
            {
                $linea_con_coma=false;           
            }
            else
            {
                $linea_con_coma=true;
            }
           
           
            if(strpos($renglon,'=>'))
            {
               $renglon=formato_renglon($renglon);
   
               
               
            }
            else
            {
   
                $renglon=str_replace('"Array",','array ',$renglon);
                $renglon=str_replace('Array','array',$renglon);
               
    //            echo "$renglon<br/>";       
            }
           
               if($linea_con_coma==true)
               {
                    $cadena_final.="$renglon\",";
               }
               else
               {
                    $cadena_final.="$renglon\n";
               }
              
               $cadena_final=str_replace(',)',')',$cadena_final);
   
    }
   
   
    $cadena_final="$cadena_final;";
    $cadena_final=str_replace('  ',' ',$cadena_final);
    $cadena_final=str_replace('  ',' ',$cadena_final);
    $cadena_final=str_replace('  ',' ',$cadena_final);
    $cadena_final=str_replace('  ',' ',$cadena_final);
    $cadena_final=str_replace('  ',' ',$cadena_final);
    $cadena_final=str_replace('  ',' ',$cadena_final);
    $cadena_final=str_replace('  ',' ',$cadena_final);
   
    $cadena_final=str_replace('"Array",','array ',$cadena_final);
    $cadena_final=str_replace('"Array,','array ',$cadena_final);
   
    $cadena_final=str_replace('(",','(',$cadena_final);
    $cadena_final=str_replace(', )"',')',$cadena_final);
    eval($cadena_final);

    return $datos;  
}



function formato_renglon($renglon)
{

       $renglon=str_replace('=> ','=> "',$renglon);
       $renglon=str_replace('[','"',$renglon);
       $renglon=str_replace(']','"',$renglon);

    return $renglon;
}


Ejemplo de factura electrónica 2022 en Panamá (DGI)

Código fuente Facturación 2022 Panamá Panamá comenzó el proceso de migración a facturación electrónica,  actualmente ya salieron los primero...