write separar parse fputs convert cadena array php csv multidimensional-array phone-number

separar - Convierta la matriz php en cadena csv



separar cadena php (5)

¿Estás seguro de que los números se están guardando realmente sin el cero inicial? ¿Has mirado la salida de CSV real en un editor de texto?

Si acaba de abrir el archivo CSV en una aplicación de hoja de cálculo, lo más probable es que la hoja de cálculo interprete sus números de teléfono como valores numéricos y omita los ceros al mostrarlos. Normalmente puede corregir eso en la hoja de cálculo cambiando las opciones de formato en esa columna en particular.

Tengo varios métodos para transformar la matriz php en cadena csv tanto de stackoverflow como de google. Pero estoy en problemas de que si quiero almacenar un número de móvil como 01727499452, se guarda como sin el primer valor 0. Actualmente estoy usando este fragmento de código: Convertir matriz en csv

Alguien puede ayudarme por favor.

Array [1] => Array ( [0] => Lalu '' " ; // Kumar [1] => Mondal [2] => 01934298345 [3] => ) [2] => Array ( [0] => Pritom [1] => Kumar Mondal [2] => 01727499452 [3] => Bit Mascot ) [3] => Array ( [0] => Pritom [1] => Kumar Mondal [2] => 01711511149 [3] => ) [4] => Array ( [0] => Raaz [1] => Mukherzee [2] => 01911224589 [3] => Khulna University 06 )

)

Mi bloque de código:

function arrayToCsv( array $fields, $delimiter = '';'', $enclosure = ''"'', $encloseAll = false, $nullToMysqlNull = false ) { $delimiter_esc = preg_quote($delimiter, ''/''); $enclosure_esc = preg_quote($enclosure, ''/''); $outputString = ""; foreach($fields as $tempFields) { $output = array(); foreach ( $tempFields as $field ) { if ($field === null && $nullToMysqlNull) { $output[] = ''NULL''; continue; } // Enclose fields containing $delimiter, $enclosure or whitespace if ( $encloseAll || preg_match( "/(?:${delimiter_esc}|${enclosure_esc}|/s)/", $field ) ) { $field = $enclosure . str_replace($enclosure, $enclosure . $enclosure, $field) . $enclosure; } $output[] = $field." "; } $outputString .= implode( $delimiter, $output )."/r/n"; } return $outputString; }

Gracias,

Pritom.


¿Esto es lo que necesitas?

$out = ""; foreach($array as $arr) { $out .= implode(",", $arr) . "/r/n"; }

Se ejecuta a través de su matriz creando una nueva línea en cada bucle separando los valores de la matriz con un ",".


Puede usar la función str_putcsv :

if(!function_exists(''str_putcsv'')) { function str_putcsv($input, $delimiter = '','', $enclosure = ''"'') { // Open a memory "file" for read/write... $fp = fopen(''php://temp'', ''r+''); // ... write the $input array to the "file" using fputcsv()... fputcsv($fp, $input, $delimiter, $enclosure); // ... rewind the "file" so we can read what we just wrote... rewind($fp); // ... read the entire line into a variable... $data = fread($fp, 1048576); // ... close the "file"... fclose($fp); // ... and return the $data to the caller, with the trailing newline from fgets() removed. return rtrim($data, "/n"); } } $csvString = ''''; foreach ($list as $fields) { $csvString .= str_putcsv($fp, $fields); }

Más sobre esto en GitHub , una función creada por @johanmeiring.


Como es un CSV y no algo así como JSON, todo se leerá como una cadena de todos modos, así que simplemente conviértalo en una cadena con:

  • (string)$variable
  • strval($variable) (que preferiría aquí)
  • concatenar con una cadena vacía como $variable . '''' $variable . ''''

gettype() PHP también sería una opción. Puede escribir cada campo en una cadena (incluso si ya es uno) utilizando uno de los métodos que describí o puede llamar solo al campo numérico que busca al hacer esto:

if (gettype($field) == ''integer'' || gettype($field) == ''double'') { $field = strval($field); // Change $field to string if it''s a numeric type }

Aquí está el código completo con el agregado

function arrayToCsv( array $fields, $delimiter = '';'', $enclosure = ''"'', $encloseAll = false, $nullToMysqlNull = false ) { $delimiter_esc = preg_quote($delimiter, ''/''); $enclosure_esc = preg_quote($enclosure, ''/''); $outputString = ""; foreach($fields as $tempFields) { $output = array(); foreach ( $tempFields as $field ) { // ADDITIONS BEGIN HERE if (gettype($field) == ''integer'' || gettype($field) == ''double'') { $field = strval($field); // Change $field to string if it''s a numeric type } // ADDITIONS END HERE if ($field === null && $nullToMysqlNull) { $output[] = ''NULL''; continue; } // Enclose fields containing $delimiter, $enclosure or whitespace if ( $encloseAll || preg_match( "/(?:${delimiter_esc}|${enclosure_esc}|/s)/", $field ) ) { $field = $enclosure . str_replace($enclosure, $enclosure . $enclosure, $field) . $enclosure; } $output[] = $field." "; } $outputString .= implode( $delimiter, $output )."/r/n"; } return $outputString; }


Estoy usando esta función para convertir una matriz php a csv. Está funcionando también para una matriz multidimensional.

public function array_2_csv($array) { $csv = array(); foreach ($array as $item=>$val) { if (is_array($val)) { $csv[] = $this->array_2_csv($val); $csv[] = "/n"; } else { $csv[] = $val; } } return implode('';'', $csv); }