У меня есть массив со строкой array("firstname" => "Mary", "lastname" => "Johnson", "age" => '0025'), я хочу экспортировать в CSV-файл, но у меня нет 0, как это 25, когда я экспортирую в CSV-файл.
я попробовал этот код, и я получил результат без 0
$data = array(
array("firstname" => "Mary", "lastname" => "Johnson", "age" => '0025')
);
$colnames = array(
'firstname' => "Fname",
'lastname' => "Last name",
'age' => "Age",
);
function map_colnames($input)
{
global $colnames;
return isset($colnames[$input]) ? $colnames[$input] : $input;
}
function cleanData(&$str)
{
if ($str == 't') $str = 'TRUE';
if ($str == 'f') $str = 'FALSE';
if (preg_match("/^0/", $str) || preg_match("/^\+?\d{8,}$/", $str) || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str)) {
$str = "$str";
}
if (strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}
// filename for download
$filename = "website_data_" . date('Ymd') . ".csv";
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: text/csv");
$out = fopen("php://output", 'rw');
$flag = false;
foreach($data as $row) {
if (!$flag) {
// display field/column names as first row
$firstline = array_map(__NAMESPACE__ . '\map_colnames', array_keys($row));
fputcsv($out, $firstline, ',', '"');
$flag = true;
}
array_walk($row, __NAMESPACE__ . '\cleanData');
fputcsv($out, array_values($row), ',', '"');
}
fclose($out);
exit;
я получил этот результат
Fname Lastname Age
MAry Johnson 25
Любое решение для этого?
Какова цель $str = "$str"? Это ничего не меняет.
@Barmar да это ничего не меняет
@Barmar, но когда я устанавливаю $str = " '$str ", я могу получить '0025, но я не хочу'
Он удаляет левые заполненные 0, потому что fputscsv считает «0025» числом 25. См. здесь для обсуждения stackoverflow.com/questions/2489553/…
Я не могу воспроизвести эту проблему. Я получаю Mary,Johnson,0025
Как вы оцениваете результаты? Почему у вас пробелы между полями вместо запятых?
@Rajes Тебе вообще не нужна эта строка. fputcsv() добавит кавычки вокруг полей, которые в них нуждаются.
Вы загружаете файл в приложение для работы с электронными таблицами? Вероятно, он удаляет нули, потому что видит его как число.
@Barmar, ты можешь написать ответ?
Что бы сказал ответ? Насколько я понимаю, проблем с ремонтом нет.
@Barmar да, я открываю его с помощью таблицы Excel
Спросите в Суперпользователь, есть ли способ запретить Excel делать это.
@Barmar, это означает, что код создает 0025, чтобы преуспеть и разделить этот 0?
Да, это то, что я говорю. Возможно, этот вопрос вам поможет.
Разве вы не могли этого увидеть, посмотрев файл в текстовом редакторе?
Я только что запустил этот код в phpfiddle.org, и он отлично работает, получая Fname, "Last name", Age Mary, Johnson, 0025. Я думаю, проблема в программе, которую вы используете для открытия csv, откройте файл в текстовом редакторе :)
@Barmar хорошо, я понял, большое спасибо
@спокойно я понял большое спасибо






@ B001ᛦ просто пример, хе-хе