【问题标题】:Passing from a row informations to two array in php从行信息传递到php中的两个数组
【发布时间】:2013-05-26 10:58:22
【问题描述】:

我是 php 的初学者。在我的应用程序中,我必须读取一个 csv 文件并将每一行的值存储在两个变量中:$namelatin

 while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

                foreach($data as $value)
                {
                        if($i>8){
                        // $fgmembersite->InsertUserBirds($value);
                        echo $value;
                        }

                    }
                     $i++;
                  echo '<br/>' ;

               } fclose($handle);

每一行行包含四个或三个单词($name 是第一个和第二个单词(如果行的长度是 4 个单词),$latin 存储最后两个单词:

如何添加数组$latin$name

【问题讨论】:

  • 这不是 csv 文件。线索是;里面没有逗号。
  • 不,它是一个 csv 文件,但我删除了逗号

标签: php file-upload csv row delimiter


【解决方案1】:

看来这个可以满足你的需要:

$name = $latin = array();
while (($data = fgetcsv($handle, 1000, ",")) !== false) {
    if (count($data) === 4) {
        $name[] = $data[0];
        $name[] = $data[1];
        $latin[] = $data[2];
        $latin[] = $data[3];
    } elseif ($count($data) === 3) {
        $name[] = $data[0];
        $latin[] = $data[1];
        $latin[] = $data[2];
    }
}

【讨论】:

    【解决方案2】:

    处理这些数据的最佳方法是寻找更可靠的来源!

    如果您必须使用此文件,请尝试以下操作:

    1. 使用 fgets 逐行处理文件。
    2. 所有物种名称都是小写的,所有属名都是大写的,因此您可以搜索最右边的大写字母。从那时起,一切都是拉丁语,左边的一切都是通用的。

    更优雅的方法是使用 preg_match 查找最后一个大写字母。我不擅长正则表达式,所以希望可以对我的进行改进,但下面将返回您的拉丁名称作为数组“匹配”的最后一个索引。如果你已经到了这一步,你应该能够解决剩下的问题。

    $matches=array();
    $pattern="/([A-Z][a-z ]*)*/";
    $testdata="Scabies Mite Sarcoptes scabii";
    preg_match($pattern,$testdata,$matches);
    var_dump($matches);
    

    虽然在学习 PHP 的同时学习 regexp 似乎令人生畏,但即使是一点点努力也会得到很好的回报,而且这个网站上有很多乐于助人的会员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 2022-01-01
      • 2013-12-15
      • 1970-01-01
      相关资源
      最近更新 更多