Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP,读取csv文件,有条件地输出为HTML_Php_Csv - Fatal编程技术网

使用PHP,读取csv文件,有条件地输出为HTML

使用PHP,读取csv文件,有条件地输出为HTML,php,csv,Php,Csv,我在网页上有一个简单的下拉框。其中包括美国所有的州。当用户选择一个状态时, 我希望一个PHP脚本只返回用户所选状态下的公司(作为HTML) 我有一个csv文件,内容如下: 国家ID、公司、联系人、电话、时间、地址1 3,abc矿业,乔治,555-555-12342012年6月6日,“纽约布朗克斯” 2,xyz矿业公司,弗雷德,555-555-23452012年6月7日,“华盛顿州西雅图” 0,我的公司,我,555-555-34562012年6月8日,“尤金,或” 3,你的公司,你,555-555

我在网页上有一个简单的下拉框。其中包括美国所有的州。当用户选择一个状态时, 我希望一个PHP脚本只返回用户所选状态下的公司(作为HTML)

我有一个csv文件,内容如下:

国家ID、公司、联系人、电话、时间、地址1
3,abc矿业,乔治,555-555-12342012年6月6日,“纽约布朗克斯”
2,xyz矿业公司,弗雷德,555-555-23452012年6月7日,“华盛顿州西雅图”
0,我的公司,我,555-555-34562012年6月8日,“尤金,或”
3,你的公司,你,555-555-456712012年6月9日,“纽约布朗克斯”

不停地,不停地

使用上述方法,通过HTML表返回stateId=3的数据(或csv中的行)

所以。。。我已经看到了许多使用fgetcsv的方法,但是如何解决上述问题呢

我想你应该抓取下拉列表中选中的索引值,将其作为条件传递,遍历每一行,只输出状态id为3的那些

理想情况下,我希望将它们输出到一个表中,但列表或纯文本就可以了

由于对PHP比较陌生(我已经10多年没有看过它了…),我非常感谢您的帮助

我知道。。。一个数据库会更容易-但我已经完全控制了csv,现在更愿意走这条路

    <?php

echo "<table>\n";

$row = 0;
$handle = fopen("mycsvfile.csv", "r");

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($row == 0) {
       // column line
        $num = count($data);
        echo "<thead>\n<tr>";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo "<th>" . $data[$c] . "</th>";
        }
        echo "</tr>\n</thead>\n\n<tbody>";
    } else {
        // non-header lines
        $num = count($data);
        echo "<tr>";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo "<td>" . $data[$c] . "</td>";
        }
        echo "</tr>\n";
    }
}
fclose($handle);

echo "</tbody>\n</table>";

?>

在这一点之后我开始失去它。。。这只是输出所有数据——我仍然需要它通过变量仅显示用户选择的状态的数据,而不是未选择的其他状态的输出行

我是否使用strpos()、explode()、split()。。。我是一个在php方面几乎没有经验的网络程序员,我希望学习。这是我的第一个项目-所以对我放轻松!我不知道,也没有使用过php函数/方法,所以我对它们不熟悉


我已经启动并运行了XAMPP,所以我并非完全没有希望。

您需要一个循环来按行读取文件,如前所述。在循环中,每一行都将返回一个带有字段值的数组。测试用户选择的stateId,如果匹配,则将该数组存储在另一个数组中。对于输出,再次循环,这一次是通过结果数组,将html标记按您认为合适的方式包装在每个元素周围,并将该标记连接到字符串中。将此字符串发送到客户端。

我假设您的数据在一个数组中。如何做到这一点的练习留给读者

$state_data = array( 
  array( 
    'id' => '3',
    'company' => 'abc mining',
    'contact' => 'George',
    'phone' => '555-555-1234',
    'when' => 'june 6 2012',
    'addy' => 'Bronx,NY' ),
  array(
    'id' => '2',
    'company' => 'xyz mining',
    'contact' => 'Fred',
    'phone' => '555-555-2345',
    'when' => 'june 7 2012',
    'addy' => 'Seattle,WA' ),

 ...

);
然后我只需要过滤掉ID为3的所有子数组

function filter_out( $var ) {
  return ('3' == $var['id']);
}

$my_states = array_filter( $state_data, "filter_out" );
最后,输出:

<table summary="state data">
<tr>
  <th>ID</th>
  <th>Company</th>
  <th>Contact</th>
  <th>Phone</th>
  <th>When</th>
  <th>Addy</th>
</tr>

<?php
foreach( $my_states as $my_state ) {
?>
<tr>
  <td><?php echo( $my_state['id'] ); ?></td>
  <td><?php echo( $my_state['company'] ); ?></td>
  <td><?php echo( $my_state['contact'] ); ?></td>
  <td><?php echo( $my_state['phone'] ); ?></td>
  <td><?php echo( $my_state['when'] ); ?></td>
  <td><?php echo( $my_state['addy'] ); ?></td>
</tr>
<?php } ?>

</table>

身份证件
单位
接触
电话
什么时候
艾迪

以下是我最后做的事情

    <?php
   $selectedSt = $_GET["states"];// get method - should clean the data...
$row = 0;
$handle = fopen("mycsv.csv", "r");//open file
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($row == 0) {//skip first row (headers)
                $row++;} 
                else {
        $stAbbrev = $data[0];
        if ($stAbbrev == $selectedSt){//show only selected state
            $num = count($data);
            $row++;
            for ($c=0; $c < $num; $c++) {
                if ($c==0){}
                else{
                    if ($data[$c]==""){}//if empty line
                    else{echo $data[$c]."<br />";}}}//write array item
                    echo "<br />";}}}//end it all with some white space
    fclose($handle);       
?>


您有什么问题吗?我们不会为你写代码。听起来你已经有了足够的方法来开始编写代码,那么为什么不这样做呢?把你迄今为止尝试过的代码发布出来。另外,我看到两个stateID为“3”,这是否意味着csv数据应该进入数据库。这将使这变得更容易和更快。试试。爆炸药片-是的,我只希望这两行数据以HTML的形式返回。我要继续做下去,布莱恩。谢谢你的帖子-我会让你知道一点…谢谢,布莱恩。在这个项目上偏离了方向。。。今天就完成了。我最终使用了你的想法,并对其进行了修改以适应应用程序。