Banner

Ultima revisión 27/12/2012

Convertir un CSV en Array con PHP

CSV2Array es una función que permite convertir un CSV en un array asociativo. Sólo necesita enviar la cadena en formato CSV a tratar y, si se desea, el carácter especial de separación entre celdas.

$data es una cadena que contiene el CSV bien formado. $separator es el carácter o símbolo separador de celdas. Por defecto es punto y coma.

/**
 * @author Pablo E. Fernández Casado
 * @author Pablo E. Fernández Casado <islavisual@gmail.com>
 * @version 1.0b
 * @license GPL
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 * Function to convert a string in CSV Format into an associative array readable for the application.
 * @param string $data The source CSV.
 * @return array Returns an associative array readable.
 * CSV example for the application.
 * -------------------------------
 * language;español
 * origen;csv
 * destino;array
 * user;username;root
 * ;password;toor
 * query;Covertir
 */

function CSV2Array($data, $separator = ";"){
    // Calculamos el número máximo de niveles.
    $result = array();
    $rows = explode("\n", $data);
    $key = "";
    $recall="";
    foreach($rows as $row){
        $values = substr($row, stripos($row,$separator)+1);
        $aux    = substr($row, 0, stripos($row,$separator));
        if($aux != "") $key = $aux;
        if($result[$key] != "") $result[$key] .= "\n".trim($values);
        else $result[$key] = trim($values);
        if(strpos($result[$key],$separator) !== false) $recall = $key;
    }
    if($recall != "") $result[$recall]= CSV2Array($result[$recall], $separator);
    return $result;         
}
$str ="language;español
origen;csv
destino;array
user;username;root
;password;toor
query;Convertir";
$arr = CSV2Array($str);
header('Content-Type: text/html; charset=utf-8');
echo print_r($arr);

Espero que os sea útil alguna vez.