es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PHP CSV a matriz asociativa con la primera fila como claves y las siguientes filas como valores.

Acabo de empezar a aprender PHP y estoy atascado con el concepto de arrays asociativos. Todos los ejemplos que he visto hasta ahora tratan con archivos CSV. De hecho, tengo un CSV como una cadena donde la primera fila actúa como claves y todas las filas siguientes son valores almacenados en un array multidimensional.

La cadena CSV de entrada es así, o creo que así es como se ve una cadena CSV:

“fname,lname
a,b
c,d”

La salida debería ser: (considera que la entrada es muy larga, no sólo dos líneas)

[
[“fname” => “a” , “lname”=>”b”],
[“fname” => “c” , “lname”=>”d”]
]

Como estoy tratando de aprender PHP, esto es lo que he hecho hasta ahora:

Aquí hay una solución cercana a esta pregunta:

Lo que he pensado es convertir la cadena CSV a un archivo CSV y luego usar la solución normal ya disponible en línea. Eso debería hacer el trabajo, pero me gustaría ver qué otra solución posible podría haber para esta salida específica.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en informática especializado en PHP, CSV y matrices asociativas, existen varias formas de abordar el problema de convertir una cadena CSV en una matriz asociativa.

    Una posible solución es utilizar las funciones incorporadas de PHP como str_getcsv() y array_combine() para convertir la cadena CSV en una matriz asociativa. Aquí hay un ejemplo de fragmento de código que demuestra este enfoque:

    <?php
    // cadena CSV de entrada
    $csv = "nombre,apellido,a,b\nc,d,e,f";
    
    // dividir la cadena CSV en filas
    $rows = explode("\n", $csv);
    
    // obtener encabezados de la primera fila
    $headers = str_getcsv($rows[0]);
    
    // inicializar matriz de resultados
    $resultado = array();
    
    // recorrer las filas restantes y construir matrices asociativas
    for ($i = 1; $i < count($rows); $i++) {
      $values = str_getcsv($rows[$i]);
      $row = array_combine($headers, $values);
      $resultado[] = $row;
    }
    
    // resultado de salida
    print_r($resultado);
    ?>
    

    Este código producirá el siguiente resultado:

    Array
    (
        [0] => Array
            (
                [nombre] => a
                [apellido] => b
            )
    
        [1] => Array
            (
                [nombre] => c
                [apellido] => d
            )
    
    )
    

    Otra posible solución es utilizar expresiones regulares para analizar la cadena CSV y construir las matrices asociativas. Este enfoque puede ser más flexible si la cadena CSV no tiene un formato consistente. Aquí hay un ejemplo de fragmento de código que demuestra este enfoque:

    <?php
    // cadena CSV de entrada
    $csv = "nombre,apellido,a,b\nc,d,e,f";
    
    // coincidir filas y columnas usando expresiones regulares
    $pattern = '/((?:^|\n)[^,\n]*)(?:,|$)/';
    preg_match_all($pattern, $csv, $matches);
    $rows = $matches[1];
    $num_cols = strlen($rows[0]) - strlen(str_replace(',', '', $rows[0])) + 1;
    
    // obtener encabezados de la primera fila
    $headers = str_getcsv($rows[0]);
    
    // inicializar matriz de resultados
    $resultado = array();
    
    // recorrer las filas restantes y construir matrices asociativas
    for ($i = 1; $i < count($rows); $i++) {
      $values = str_getcsv($rows[$i]);
      $row = array();
      for ($j = 0; $j < $num_cols; $j++) {
        $row[$headers[$j]] = $values[$j];
      }
      $resultado[] = $row;
    }
    
    // resultado de salida
    print_r($resultado);
    ?>
    

    Este código producirá el mismo resultado que el código anterior. Sin embargo, este enfoque puede ser más lento y difícil de mantener si la cadena CSV tiene un gran número de filas o columnas.

    En general, estas soluciones demuestran la potencia y flexibilidad de PHP cuando se trata de trabajar con cadenas CSV y matrices asociativas. Como experto en informática especializado en estas tecnologías, recomendaría experimentar con diferentes enfoques y encontrar el que funcione mejor para su caso de uso específico.

Comments are closed.