两个参数都应具有相同数量的元素

时间:2018-03-07 16:08:27

标签: php arrays

您好我有这个脚本,它从.txt:

获取数据
public function parse_sigle_item1($filename, $vnum)
{    
    $result = array();
    $fp = fopen($filename, "r");
    if (($headers = fgetcsv($fp, 0, "\t")) !== FALSE) {
        //remove all non characters
        $headers = $results = array_map( function ($n) {
            return preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $n);
        }, $headers );

        //Get index of vnum
        $vnumIdx = array_search( "VNUM" , $headers);

        if ($headers)
        while (($line = fgetcsv($fp, 0, "\t")) !== FALSE)
          if ($line)
            if ( sizeof($line)==sizeof($headers) && $line[$vnumIdx] == $vnum )
              $result[ $line[$vnumIdx] ] = array_combine($headers,$line);
    }

    fclose($fp);

    return $result;
}

我的txt标题如下:(制表符分隔)

VNUM    TYPE    ICON    MODEL

我有两种类型的线,一种有MODEL而另一种不具有:

1   ETC   test.png   test1
2   ETC   test2.png

如您所见VNUM 2中没有MODEL或标签...

我需要帮助来填充MODE 0或者其他内容没有错误,如:

  

两个参数应具有相同数量的元素

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用array_pad()确保您的数据数据与标题相同...

while (($line = fgetcsv($fp, 0, "\t")) !== FALSE) {
   if ( $line[$vnumIdx] == $vnum ) {
       $line = array_pad($line, count($headers), 0);
       $result[ $line[$vnumIdx] ] = array_combine($headers,$line);
   }
}

您可以轻松更改填充它的值,并且可能的优化是存储$ headers数组的大小,而不是每次都获取它。