簡體   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