Создать CSV из многомерного массива с помощью fputcsv
Я пытаюсь получить многомерный массив в CSV-файл. данные в массиве таковы:
Array
(
[0] => Array
(
[product_id] => 1111
[name] => Alcatel One Touch Idol 2
[keyword] => alcatel-one-touch-idol-2
[options] => Array
(
[0] => Array
(
[price] => 54.0000
)
[1] => Array
(
[price] => 42.0000
)
[2] => Array
(
[price] => 10.0000
)
[3] => Array
(
[price] =>
)
[4] => Array
(
[price] =>
)
[5] => Array
(
[price] =>
)
[6] => Array
(
[price] =>
)
[7] => Array
(
[price] =>
)
[8] => Array
(
[price] =>
)
[9] => Array
(
[price] =>
)
)
)
[1] => Array
(...... etc)
Я получаю все данные верхнего уровня, но затем, когда он достигает массива параметров, я получаю Array to string conversion
ошибки. Итак, у меня есть две проблемы, мне сначала нужно понять, почему я получаю эту ошибку, а затем мне нужно fputcsv всю эту информацию в одной строке для каждого продукта.
Пока у меня есть это для анализа массива в CSV:
$output = fopen("php://output",'w') or die("Can't open php://output");
header("Content-Type:application/csv");
header("Content- Disposition:attachment;filename=product_catalog.csv");
$first_line = explode(",", $first_line);
fputcsv($output, $first_line);
foreach($csv as $file) {
fputcsv($output, $file);
}
fclose($output) or die("Can't close php://output");
Если бы кто-нибудь мог мне помочь, я был бы очень признателен. С уважением.
1 ответ
Решение
Я бы предложил сначала сплющить каждый массив:
foreach ($csv as $file) {
$result = [];
array_walk_recursive($file, function($item) use (&$result) {
$result[] = $item;
});
fputcsv($output, $result);
}
На каждой итерации создается массив, подобный следующему:
[1111, 'Alcatel One Touch Idol 2', 'alcatel-one-touch-idol-2', 54, 42, ...]
foreach ($data as $line) {
foreach($line as $array){
foreach($array as $result){
fputcsv($f,$result,",");
}
}
}
я знаю, это старый вопрос, но вы также можете использовать это