【问题标题】:PHP, CSV file to array, html valuesPHP、CSV 文件到数组、html 值
【发布时间】:2016-06-21 05:11:49
【问题描述】:

我正在使用此代码读取任何 CSV 文件来构建一个数组,以便我以后可以使用它,我遇到的问题是这个特定的 CSV 文件包含带有 html 的列

$csv = array_map('str_getcsv', file('docs/foo.csv'));
$headers = $csv[0];
unset($csv[0]);
$csvarray = [];
foreach ($csv as $row) {
    $newRow = [];
    foreach ($headers as $k => $key) {
        $newRow[$key] = $row[$k];
    }
    $csvarray[] = $newRow;
}

它适用于任何其他 CSV 文件,但对于这个特定的 CSV 它就不起作用:

示例 csv:

cat,name,des,ldes,datas
1,foo1,desfoo1,<h1>foo</h1><p class="finetext">sometext</p>, data1,data2,data3
3,foo3,desfoo3,<h1>foo3</h1><p class="finetext">sometext</p>, data4,data6

我得到的数组是这样的:

array (
[cat]=>1
[name]=>foo1
[des]=>desfoo1
[ldes]=>foo
... after this everything breaks...

那么,我怎样才能在这个 CSV 文件中构建一个数组,该文件具有 html 的 coulmns/values...

更新

[1] => Array
    (
        [cat] => 12
        [name] => Foo no html
        [des] => From foo no html
        [ldes] => 'Basic long desc with htmls
    )
[2] => Array
    (
    [0] =>
    )
[3] => Array
    (
    [0] =>
    basic next row html
    some text inside p with class
    )

这是我得到的数组,它只是分解为一个无意义的数组...

【问题讨论】:

  • 我会看到两个可能的问题。换行是 Windows 或类 Unix(其中一个或另一个未正确管理)。或者编码正在报废这一切。
  • 在 op 数组中你还想要这些 html 标签吗?或仅标签内的内容
  • @MasterDJon 老实说我不知道​​发生了什么,我正在使用 excel 构建一个基本的 csv 文件,然后我切换到 Open Office 以更好地控制如何使用分隔符,那里没有运气,然后我使用单引号 ' 手动构建一个非常简单的 csv 来将每一列括起来没有运气......
  • 在你上一次的 sn-p 中,“一切都坏了”到底是什么意思?你得到什么错误信息或错误输出?
  • @aniketashtekar 是的,所有 html 和 csv 中的任何 html 都是必需的,最后一列(数据)也困扰着我,因为这些值用逗号分隔,但这不是我可以解决的问题那可是 html....

标签: php arrays csv


【解决方案1】:

我认为代码没有问题,我发现的唯一问题是“您正在使用print_r 输出$csvarray,这会导致问题尽量不要使用print_r,如果你想要更好用于输出的调试器使用 kint

https://github.com/kint-php/kint

或者使用下面的修改代码

$csv = array_map('str_getcsv', file('docs/foo.csv'));
$headers = $csv[0];
unset($csv[0]);
$csvarray = [];
foreach ($csv as $row) {
    $newRow = [];
    foreach ($headers as $k => $key) {
        $newRow[$key] = htmlentities ($row[$k]);
    }
    $csvarray[] = $newRow;
}

print_r($csvarray);

【讨论】:

    【解决方案2】:

    所以你可以接受我的评论作为答案,这里是相同的评论。

    我会看到两个可能的问题。换行是 Windows 或类 Unix(其中一个或另一个未正确管理)。或者编码正在报废。

    我会在一行中添加换行符(就像在 HTML 部分中一样)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 2021-06-18
      • 2013-02-28
      • 2012-10-17
      • 2011-12-05
      相关资源
      最近更新 更多