Учусь конвертировать csv файлы в формат json на php(который тоже знаю не очень), большая просьба помочь с алгоритмом. есть следующий csv фрагмент который упакован в файл data.csv :
Name;Art;Price
Товар 1;1001;10639
Товар 2;1002;23387
Товар 3;1003;20129
Товар 4;1004;14005
Товар 5;1005;49594
Товар 6;1006;20181
Товар 7;1007;37999
Товар 8;1008;29357
Товар 9;1009;49505
Товар 10;1011;11047
Товар 11;1012;18564
Очевидная задача получить JSON файл data.json следующего вида :
[
{
"Name": "Товар 1",
"Art": 1001,
"Price": 10639
},
{
"Name": "Товар 2",
"Art": 1002,
"Price": 23387
},
{
"Name": "Товар 3",
"Art": 1003,
"Price": 20129
},
{
"Name": "Товар 4",
"Art": 1004,
"Price": 14005
},
{
"Name": "Товар 5",
"Art": 1005,
"Price": 49594
},
{
"Name": "Товар 6",
"Art": 1006,
"Price": 20181
},
{
"Name": "Товар 7",
"Art": 1007,
"Price": 37999
},
{
"Name": "Товар 8",
"Art": 1008,
"Price": 29357
},
{
"Name": "Товар 9",
"Art": 1009,
"Price": 49505
},
{
"Name": "Товар 10",
"Art": 1011,
"Price": 11047
},
{
"Name": "Товар 11",
"Art": 1012,
"Price": 18564
}
]
из csv файла я посредством
$csv = array_map('str_getcsv', file('data.csv'));
получил ассоциативный массив :
array(12) {
[0]=> array(1) { [0]=> string(14) "Name;Art;Price" }
[1]=> array(1) { [0]=> string(23) "Товар 1;1001;10639" }
[2]=> array(1) { [0]=> string(23) "Товар 2;1002;23387" }
[3]=> array(1) { [0]=> string(23) "Товар 3;1003;20129" }
[4]=> array(1) { [0]=> string(23) "Товар 4;1004;14005" }
[5]=> array(1) { [0]=> string(23) "Товар 5;1005;49594" }
[6]=> array(1) { [0]=> string(23) "Товар 6;1006;20181" }
[7]=> array(1) { [0]=> string(23) "Товар 7;1007;37999" }
[8]=> array(1) { [0]=> string(23) "Товар 8;1008;29357" }
[9]=> array(1) { [0]=> string(23) "Товар 9;1009;49505" }
[10]=> array(1) { [0]=> string(24) "Товар 10;1011;11047" }
[11]=> array(1) { [0]=> string(24) "Товар 11;1012;18564" }
}
Понимаю что следующей итерацией мне необходимо данный массив перебрать и привести к образцу, но не понимаю как это сделать. Собственно просьба о помощи в подсказке правильного цикла для данного действия. А может быть я что то делаю не так, Спасибо
В целом это будет так:
$json_array = [];
$lines = file('data.csv', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
// Получаем первую строку с заголовками
$headers = array_shift($lines);
// Делаем из нее массив
$headers = str_getcsv($headers, ';'); // Укажите использующийся разделитель
foreach ($lines as $line) {
$json_array[] = array_combine(
$headers,
str_getcsv($line, ';'), // Укажите использующийся разделитель
);
}
echo json_encode($json_array);
Через array_map
вы не сможете передать разделитель ;
.
Для начала надо научиться читать csv. Причем не скопипастив код неизвестно откуда, а вдумчиво разобравшись. Для этого гуглим свою задачу, берем пример с соответствующей страницы мануала и адаптируем под себя.
$handle = fopen("z.csv", "r");
$headers = [];
$result = [];
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
if (!$headers) {
$headers = $data;
} else {
$result[] = array_combine($headers, $data);
}
}
если хочется перебирать массив, то $array - это массив который получился
<?php
$array = [
['name;price'],
['milk;10'],
['chocolate;8'],
];
$res = [];
// получаем подмассив с оглавлением и заодно убираем оглавление из массива
$firstLine = array_shift($array);
$keys = explode(";", $firstLIne[0]); // разбиваем его на ключи
foreach ($array as $line) {
//собираем массив из двух, где первый массив - ключи, второй значения
$res[] = array_combine(
$keys,
explode(';', $line[0])
);
}
//конвертируем результат в json
$json = json_encode($res);
echo $json;
//выводит [{"name":"milk","price":"10"},{"name":"chocolate","price":"8"}]
$fo1 = fopen("lun.csv", "r");
$fd1 = fread($fo1, filesize("lun.csv"));
fclose($fo1);
// Делаем массивы строк
$da1 = explode("\r\n", $fd1);
$chery=count($da1);
for($i = 0; $i <= $chery-1; $i++) {
$da2[]=explode(";", $da1[$i]);
// Выводим нужные строки
$arri=array('Name','Art','Price');
foreach($arri as $key =>$val){
$arrl[$val]=$da2[$i][$key];
}
$arrt[]=$arrl;
}
print_r($arrt);
print_r(json_encode($arrt));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть простая форма с двумя полями: телефон и emailНужно автоматически отправлять файл на почту, которую укажет пользователь в поле email
Начал учить ООП php и вроде написал код который работает, но на 100% уверен что с ним что-то не так, но что именно не поймуЭто мини система авторизации...
Имеется страница авторизации и база данных с таблицей пользователей и таблицей ролей этих пользователейТаблицы связаны внешним ключом