Intereting Posts
HttpResponse response = client.execute (httpGet), код после того, как httpresponse не запускается получить номер перед «подчеркиванием» с помощью php Предотвращение множественных записей с помощью PHP PHP strtotime () «первый понедельник февраля» возвращается во второй понедельник, если 1 февраля – понедельник $ _POST с переменным количеством входов? Контактная форма не будет отправлять данные Как отсортировать все уровни многомерного массива по ключу? Удалить расширение php веб-сайта с помощью htaccess Возвращение модели Eloquent в качестве JSON в Laravel 4 Развертывание контента на несколько серверов (EC2) Действие формы не передает жестко заданную переменную Многомерный массив PHP – поиск значения и получение подматрицы Memcache получает ключевое время истечения срока действия Возвращение отсутствующих результатов от многих до многих таблиц Отправить значения select в массиве

Преобразование php-массива в строку csv

У меня есть несколько способов преобразования php-массива в строку csv как из stackoverflow, так и из google. Но у меня проблемы, если я хочу сохранить номер мобильного телефона, такой как 01727499452, он сохраняет как без значения первого 0. В настоящее время я использую этот фрагмент кода: Преобразование массива в csv

Кто-нибудь может мне помочь, пожалуйста.

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 ) 

)

Мой кодовый блок:

 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; } 

Благодаря,

Pritom.

Solutions Collecting From Web of "Преобразование php-массива в строку csv"

Вы можете использовать функцию 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); } 

Подробнее об этом в GitHub , функции, созданной @johanmeiring.

Это то, что тебе надо?

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

Он проходит через ваш массив, создавая новую строку в каждом цикле, разделяя значения массива на «,».

Вы уверены, что цифры фактически сохраняются без начального нуля? Вы посмотрели фактический результат CSV в текстовом редакторе?

Если вы только что открыли файл CSV в приложении для работы с электронными таблицами, скорее всего это электронная таблица, которая интерпретирует ваши телефонные номера в виде числовых значений и отбрасывает нули при их отображении. Обычно вы можете исправить это в электронной таблице, изменив параметры форматирования в этом конкретном столбце.

Поскольку это CSV, а не что-то вроде JSON, все будет читаться как строка в любом случае, поэтому просто преобразуйте свой номер в строку с помощью:

  • (string)$variable
  • strval($variable) (которую я бы предпочел здесь)
  • конкатенация с пустой строкой, как $variable . '' $variable . ''

PHP gettype() также будет вариантом. Вы можете вводить каждое поле в строку (даже если она уже одна), используя один из описанных методов или вы можете вызывать только поле с номерами, которое вы выполните, выполнив следующее:

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

Вот полный код с добавлением

 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; } 

Я использую эту функцию для преобразования php-массива в csv. Он также работает для многомерного массива.

 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); }