[英]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.