Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532

Сохранение массива в csv

23.10.2019, 19:57. Показов 2528. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Вот var_dump массива:

array(12) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" [4]=> string(1) "5" [5]=> string(1) "6" [6]=> string(1) "7" [7]=> string(1) "8" [8]=> string(1) "9" [9]=> string(2) "10" [10]=> string(2) "11" [11]=> string(2) "12" }
Далее хочу это дело записать в csv:

PHP
1
2
3
4
5
$file = fopen("db.csv","w");
    foreach($rowsArr as $line){
        
        fputcsv($file, $rowsArr);
    }
В созданном csv получаю:

1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12


Добавлено через 8 минут
Мне нужно создать массив массивов чтль? Каждая строка будет отдельный массив?

Добавлено через 2 часа 3 минуты
Ой нет, все не могу...

В общем нужно создать многомерный массив и заполнять его в цикле. Я уже все перепробовал. Как Вы это делайте???

Мне нужно что-то вроде:

PHP
1
2
3
4
5
6
7
8
9
10
11
while($row = $result->fetch_assoc()) {
            
            $cars = array
  (
  array($row["id_1"]),
  array($row["id_2"),
  array($row["id_3"),
  );
            
            
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2019, 19:57
Ответы с готовыми решениями:

php сохранение в csv
проблемма при сохранении массива в csv public function xml2Csv(Array $csv) { $handle = fopen('res.csv',...

Сохранение из формы в CSV файл
Имеется форма <form action="registration.php" method="post" name="registration"> <input type="Text" name="Name"><font...

php и сохранение в csv кирилицу
Вот код сохранения формы в csv файлик. Проблема в том что кириллица неверно отображается. setlocale и header не помогали, но возможно я в...

13
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
23.10.2019, 21:15
PHP
1
2
3
4
$arr = [];
 
while($row = $result->fetch_assoc())
    $arr[] = $row;
1
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
23.10.2019, 21:53  [ТС]
Jodah, я как раз Ваш вариант рассматриваю от 15 года: Заполнить многомерный массив в цикле

Вот мне нужно что-то подобное. Т.е. есть массив, который содержит несколько массивов и они все заполняются в цикле.
Это должно быть что-то вроде:

PHP
1
2
3
4
5
6
7
8
while($row = $result->fetch_assoc()) {
            
        $list = array (
                         array("Peter", "Griffin" ,"Oslo", "Norway"),
                         array("Glenn", "Quagmire", "Oslo", "Norway")
                 ); 
            
        }
Только заполняться должны автоматом из $row["field1"], $row["field2"]... Ну или я опять что-то не то делаю
0
 Аватар для TolikD
117 / 81 / 36
Регистрация: 30.07.2017
Сообщений: 371
23.10.2019, 22:47
Лучший ответ Сообщение было отмечено ilja123 как решение

Решение

А, теперь понятно. Jodah не очень понял, что именно требуется в задаче. ТС не смог сразу доходчиво выразить мысль. То есть вопрос был в том, как передать элементы из базы в массив без индексов.
PHP
1
2
3
4
5
6
7
$list = array();
while($row = $result->fetch_assoc()) {
    $arr = array();
    foreach ($row as $val)
        $arr[] = $val;
    $list[] = $arr;
}
1
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
23.10.2019, 23:04  [ТС]
У ТС уже глаза ничего не видят. Извиняюсь за отсутствие выразительности.

В общем сделал топорным способом: Перед циклом создаю кучу массивов, в цикле перебираю, после цикла все созданные массивы запихиваю в один.

Я так пол дня назад начинал делать, решил, что это коряво. Можно же в PHP как-то более элегантно это сделать. Но не смог.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        $arr = array();
    $row_field_1 = array();
    $row_field_2 = array();
 
        if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            
            $row_field_1[] = $row["field_1"];
             $row_field_2[] = $row["field_2"];
            
        }
    } else {
    echo "0 results";
    }
 
        $arr[] = $row_field_1;
    $arr[] = $row_field_2;
0
 Аватар для TolikD
117 / 81 / 36
Регистрация: 30.07.2017
Сообщений: 371
23.10.2019, 23:12
Ну да, выглядит, как решение. Но я уже выдал то, что нужно. Если подогнать под последний вариант, то будет так
PHP
1
2
3
4
5
6
7
8
$arr = array();
while($row = $result->fetch_assoc()) {
    $a = array();
    foreach ($row as $val)
        $a[] = $val;
    $arr[] = $a;
}
if (!count($arr)) echo '0 results';
В данном случае не нужно перечислять возможные поля в таблице, если конечно же это не важно.
0
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
23.10.2019, 23:29  [ТС]
Теперь другая проблема:

PHP
1
2
3
4
foreach($arr as $line){
        
        fputcsv($file, $line);
    }
Когда заканчивается 1-ый массив и начинается второй, разделитель отсутствует. Т.е. последний элемент 1-го массива и первый элемент второго массива склеены. Так же не должно быть.
0
 Аватар для TolikD
117 / 81 / 36
Регистрация: 30.07.2017
Сообщений: 371
23.10.2019, 23:46
Да, должно быть всё в порядке. А где просматриваешь csv, в блокноте или в экселе? Сделай var_dump($arr)
0
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
23.10.2019, 23:55  [ТС]
В блокноте. Я в учебнике посмотрел, там тоже так.

PHP
1
2
3
4
5
6
7
8
$list = array (
  array("Peter", "Griffin" ,"Oslo", "Norway"),
  array("Glenn", "Quagmire", "Oslo", "Norway")
 
foreach ($list as $line) {
  fputcsv($file, $line);
}
);
В блокноте: Peter,Griffin,Oslo,NorwayGlenn,Quagmire, Oslo,Norway
0
 Аватар для TolikD
117 / 81 / 36
Регистрация: 30.07.2017
Сообщений: 371
24.10.2019, 00:01
Лучший ответ Сообщение было отмечено ilja123 как решение

Решение

Скорей всего всё впорядке. Блокнот не всегда корректно отображает переносы. Лучше просмотреть таким вот образом:
PHP
1
2
echo '<pre>'.PHP_EOL;
echo file_get_contents('file.csv');
1
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
24.10.2019, 00:05  [ТС]
Да, Вы правы! Открыл файл в csv-online, там все корректно. Спасибо!!!
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
24.10.2019, 01:59
Jodah, можно сократить
PHP
1
while($row[]= $result->fetch_assoc()){}
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
24.10.2019, 02:27
Azdeman, нет, в конце будет лишний элемент с false.
1
 Аватар для TolikD
117 / 81 / 36
Регистрация: 30.07.2017
Сообщений: 371
24.10.2019, 13:05
Azdeman, если сократить, тогда уж таким образом
PHP
1
$row = $result->fetch_all();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.10.2019, 13:05
Помогаю со студенческими работами здесь

Запись в CSV-файл из массива. Не является форматом csv!
В общем искал работу... Дали тестовое написать парсер для сайта с выводом информации в csv-файл. Всё написал, сбросил, пришёл ответ что у...

Сохранение в CSV
Добрый день! Имеется excel файл форматом .xlsx Напишите пожалуйста макрос который сохранит этот файл с тем-же названием, в ту-же...

Сохранение в csv из tableView
Есть готовая функция сохранения, но как её вызвать? Что писать в параметрах void MainWindow::saveAsCSV(QString filename) { QFile...

Сохранение Stringgrid в CSV
Всем привет. На просторах интернета нашел код для сохранения procedure SaveToCSV(DataSet: TDataSet; FileName: String); const ...

Сохранение файла в csv
Почему при сохранении файла в экселе в формате csv,потом когда открываю в openoffice,ячейки состоящие из 2 слов,каждое слово...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru