【问题标题】:Insert multidimensional array into csv in PHP在PHP中将多维数组插入csv
【发布时间】:2014-01-27 18:04:15
【问题描述】:

我有一个这样结构的数组

  [cars] => Array
    (
        [0] => 43063
        [1] => 17306
        [2] => 116078
    )

  [houses] => Array
    (
        [0] => 13300
        [1] => 32243
    )

[garage] => Array
    (
        [0] => 13094
        [1] => 30649
    )

 [hotels] => Array
    (
        [0] => 10025
        [1] => 59468
        [2] => 29734
    )

我想从该数组中创建一个 csv 文件。我的 csv 文件应该这样构造 汽车,43063,17306,116078 房屋,13300,32243,1000 车库,13094,30649,1000 酒店,10025,59468,29734

我已经尝试了几个代码,但我没有得到我想要的,我怎样才能在 php 中实现它?

这是我的数组的 var 转储

array(4) {
["23"]=>
array(1) {
["cars"]=>
int(43063)
}
[23]=>
array(4) {
["cars"]=>
int(17306)
["houses"]=>
int(13300)
["garage"]=>
int(13094)
["hotels"]=>
int(10025)
}
[22]=>
array(4) {
["cars"]=>
int(116078)
["houses"]=>
int(32243)
["garage"]=>
int(30649)
["hotels"]=>
int(59468)
}
[21]=>
array(1) {
["hotels"]=>
int(29734)
}
}

我想要一个包含 4 行的 csv,每个键(酒店、汽车、车库等)一行。

cars,43063,17306,116078
houses,13300,32243,1000
garage,13094,30649,1000
hotels,10025,59468,29734

【问题讨论】:

标签: php csv multidimensional-array


【解决方案1】:

你可以试试这样的

function arrayToValues(array $data)
{
    $output = array();

    foreach ($data as $key => $item) {
        if (is_array($item)) {
            $output = array_merge($output, array($key), arrayToValues($item));
        } else {
            $output[] = $item;
        }
    }

    return $output;
}

$csvData = implode(',', arrayToValues($yourArrayData));

如果您想编写输出,您可以将fputcsv 与函数结合使用。

【讨论】:

  • 这是将多维数组转换为 CSV 输出的唯一函数,我发现它实际上适用于我的数组。但是,它不会在每个项目的末尾添加一个新行。仍在努力解决这个问题。
【解决方案2】:

又快又脏:

foreach ($arr as $key => $vals) {
    echo $key . implode(",", $vals) . "\n";
}

更新:

$transformed = array();
foreach ($arr as $item) {
    foreach ($item as $key => $val) {
        $transformed[$key][] = $val;
    }
}
foreach ($transformed as $key => $vals) {
    echo $key . implode(",", $vals) . "\n";
}

【讨论】:

  • 我已经尝试过你的代码,但我没有得到想要的结果,这是我得到的 43063 17306 116078 13300 32243 13094 30649 10025 59468 29734
  • 在您的阵列上做一个 var_dump 并将其发布在您的问题中。
  • 不要使用这个 echo ",..." 结构。 implode(',', $vals) 是实现这一目标的更好方法。
  • 您的数组与描述的数据结构不匹配。
  • @jgroenen,很抱歉,我没有添加反对票,它是由网站自动添加的,我无法更改。您的代码帮助我解决了我面临的问题。非常感谢
猜你喜欢
  • 1970-01-01
  • 2021-05-30
  • 2013-10-06
  • 2011-12-12
  • 1970-01-01
  • 2017-07-03
  • 2012-07-21
  • 1970-01-01
相关资源
最近更新 更多