繁体   English   中英

PHP CSV - 不确定的行到列

[英]PHP CSV - indeterminate rows to columns

我有一个 CSV 客户端文件,其中包含功能名称和一个定义该功能的(元数据)json 字符串。 每个客户可以拥有 10 到 15 个功能,并且无法确定哪个客户拥有什么。

在视觉上以这种格式:

客户 特征 元数据
客户1 特征名称 1 json字符串
客户1 特征名称 2 json字符串
客户1 特征名称 3 json字符串
客户2 特征名称 1 json字符串
客户2 特征名称 2 json字符串
客户2 特征名称 3 json字符串

有了这些数据,我需要为利益相关者创建 json 的可读格式,以了解我们的客户如何使用这些功能。 我手动创建了一个电子表格,每个客户端都在一行中,元数据在列中。 这是不可维护的,考虑到我花了一个完整的周末来做,而且客户数量在增加。

现在我正在遍历 CSV 文件,从元数据中为每个客户端创建列; 但我不知道客户端将具有的每个功能,因此我无法动态构建匹配 header 行的表。 这是我开始构建的内容,您可以在逻辑中看到,如果某个功能不存在,则数据将与 header 不匹配:

<table>
    <thead>
        <tr>
            <td>Client</td>
            <td>adminNotifications</td>
            <td>indexerJobSync - default</td>
            <td>indexerJobSync - defined</td>
        </tr>
    </thead>
    <tbody>
        <tr><?php
            $file = fopen("query.csv", "r");
            fgetcsv($file); //skip first row
            while (!feof($file)) {
                $data = fgetcsv($file, null, ';');
                $meta = json_decode($data[3], TRUE);
                if ($data[0] === 'BillyBobsCrabShack') {
                    if ($data[1] === 'adminNotifications') echo "<td>" . $meta['email'] . "</td>";
                    if ($data[1] === 'indexerJobSync') echo "<td>" . $meta['defaultIndexer'] . "</td><td>" . $meta['definedIndexer'] . "</td>";
                }
            }
            fclose($file);
            ?></tr>
    </tbody>
</table>

我最终编写了逻辑来创建一个我可以首先使用的数组,然后再显示。 在我的情况下,功能的数量是有限的,但它们并没有在所有客户端上启用,所以我创建了一系列功能,并为它们分配了客户端。

$file = fopen("query.csv", "r");
  fgetcsv($file); //skip first row
  $newdata = [];
  while (!feof($file)) {
    $data = fgetcsv($file, null, ';');
    $newdata[$data[1]][$data[0]] = $data[3];
  }
  fclose($file);

这会创建一个数组,例如:

Array
(
    [feature1] => Array
        (
            [client1] => jsonstring
            [client2] => jsonstring
            [client3] => jsonstring
        )

    [feature2] => Array
        (
            [client4] => jsonstring
            [client5] => jsonstring
            [client6] => jsonstring
        )
)

从那里,我只是将数组键写入我的显示器,或者我需要处理它:

<?= isset($newdata['fileCategory']['client1']) ? "TRUE":"FALSE" ?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM