为了账号安全,请及时绑定邮箱和手机立即绑定

使用键从数组中获取第一个元素

使用键从数组中获取第一个元素

PHP
开满天机 2022-10-28 15:38:17
我对 PHP(来自 JS)很陌生,所以在调试这个问题时遇到了麻烦。我已导入 a.csv以呈现到 html 表,并试图检索一列,以便我可以订购表。该表包含 5 个标题(日期、交易编号、客户编号、参考、金额)。我可以检索除Date列之外的所有值。那只是返回一个空值。<?php  $rows = array_map('str_getcsv', file('BankTransactions.csv'));  $header = array_shift($rows);  $csv = array();  foreach ($rows as $row) {    $csv[] = array_combine($header, $row);  }  print_r($csv[0]['Date']);  print_r("\n")?>// .csvDate,TransactionNumber,CustomerNumber,Reference,Amount2016-12-10 1:54PM,NUF5V6PT3U,5156,Purchase at JB HiFi,-24982016-12-4 4:54AM,J82964EFPS,2347,Refund,54242016-12-12 5:25PM,ZUFBQGCKTK,5683,Fee Refund,2542016-12-01 12:00AM,XHNCASYLBR,2347,Purchase at Coles,-88732016-11-23 10:34PM,S98EBHDWG3,3423,Wages,1987002017-09-23 9:34AM,MPNQYKVJ3G,4657,Purchase at Chemist Warehouse,-5842015-11-23 10:34PM,74CQKEGSHB,2173,Refund,-35142015-11-23 10:35PM,WPTJMNVH4U,4527,Purchase at Hungry Monkey,452452017-01-01 12:00AM,U6BD3M75FD,7577,Interest,2778// Array received from `.csv`Array(    [0] => Array        (            [Date] => 2016-12-10 1:54PM            [TransactionNumber] => NUF5V6PT3U            [CustomerNumber] => 5156            [Reference] => Purchase at JB HiFi            [Amount] => -2498        )    [1] => Array        (            [Date] => 2016-12-4 4:54AM            [TransactionNumber] => J82964EFPS            [CustomerNumber] => 2347            [Reference] => Refund            [Amount] => 5424        )    [2] => Array        (            [Date] => 2016-12-12 5:25PM            [TransactionNumber] => ZUFBQGCKTK            [CustomerNumber] => 5683            [Reference] => Fee Refund            [Amount] => 254        )    [3] => Array        (            [Date] => 2016-12-01 12:00AM            [TransactionNumber] => XHNCASYLBR            [CustomerNumber] => 2347            [Reference] => Purchase at Coles            [Amount] => -8873        )
查看完整描述

2 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

您的 CSV 文件可能使用 UTF-8 编码,带有BOM(字节顺序标记)。

PHP 在读取文件时确实(仍然)不能正确处理 BOM,因此您从文件中读取的第一行仍然会在开始时包含它,因此第一列值也仍然会包含它。因此,您在$csv数组中的键实际上不是Date,而是[BOM]Date,但是您在 print_r 输出中看不到它(BOM 本身实际上并不“可见”。)

有关如何删除 BOM 的建议,请参阅如何删除多个 UTF-8 BOM 序列https://gist.github.com/chrisguitarguy/6096271


查看完整回答
反对 回复 2022-10-28
?
烙印99

TA贡献1829条经验 获得超13个赞

您需要获取每个字段的交易。这里:https ://www.php.net/manual/en/function.fgetcsv.php


我正在使用完全相同的 CSV 文件并为面试制定了解决方案。可以在以下链接上测试 CSV 文件: https ://paduademo.azurewebsites.net/


<?php foreach ($transactions as $transaction) : ?>

                    <tr>

                        <td><?php echo $transaction['Date']; ?></td>

                        <td><?php echo $transaction['TransactionNumber']; ?></td>

                        <td><?php echo ($transaction['Valid'])? 'Yes': 'No'; ?></td>

                        <td><?php echo $transaction['CustomerNumber']; ?></td>

                        <td><?php echo $transaction['Reference']; ?></td>

                        <td><span class="<?php echo ($transaction['type'] == 'Credit')? 'text-danger': 'text-success'; ?>"><?php echo (($transaction['type'] == 'Credit')? '-': '') . '$' . $transaction['Amount']; ?></span></td>

                    </tr>

<?php endforeach; ?>

截图如下:

//img1.sycdn.imooc.com//635b871a0001731909890970.jpg

查看完整回答
反对 回复 2022-10-28
  • 2 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信