Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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 如何从不同的行连接单行列中的列_Php_Mysql_Excel - Fatal编程技术网

Php 如何从不同的行连接单行列中的列

Php 如何从不同的行连接单行列中的列,php,mysql,excel,Php,Mysql,Excel,我需要读取Excel数据并保存到数据库中,但出现以下问题: Excel格式: 我需要在数据库中保存数据,但问题是,在消息列中,某些列以[1/2-PNR]开头,这意味着它有一条长消息,该消息分为两部分,如[2/2-PNR]所示 但该消息需要保存在一列中 与类似[1/3-ADF]的消息相同,即消息分为三部分,需要以单列形式保存在数据库中 我尝试用下面的代码保存数据,但无法保存 我使用这个zip文件来读取excel 起初,由于图像很难读取,我以为您在消息中的列数与部分数相同,但现在我意识到您的行数与

我需要读取Excel数据并保存到数据库中,但出现以下问题:

Excel格式:

我需要在数据库中保存数据,但问题是,在消息列中,某些列以[1/2-PNR]开头,这意味着它有一条长消息,该消息分为两部分,如[2/2-PNR]所示

但该消息需要保存在一列中

与类似[1/3-ADF]的消息相同,即消息分为三部分,需要以单列形式保存在数据库中

我尝试用下面的代码保存数据,但无法保存

我使用这个zip文件来读取excel


起初,由于图像很难读取,我以为您在消息中的列数与部分数相同,但现在我意识到您的行数与部分数相同

我认为最好是用PHP处理数据,如下所示:

$part = 1;
$parts = 1;
for ($row=2; $row<=$xls->rowcount(); $row++) {
     $mobile_no=$xls->val($row,1);
     $party_name=$xls->val($row,2);
     if ($part < $parts) { // need to merge rows
        $message = $message . $xls->val($row,3);
        $part++;
     }
     else { // a new message
          $message = $xls->val($row,3);
          $pattern = "/^\[()\/()-" . $party_name . "\]/";
          $part = 1;
          if (preg_match($pattern, $message, $matches)) {
             $parts = $matches[2];
          }
          else $parts = 1;
     }
     if ($part == $parts) { // completed a message
        $query="insert into party_excel set
                    party_name='".mysql_real_escape_string($party_name)."',
                    message='".mysql_real_escape_string($message)."',
                    moble_no='".mysql_real_escape_string($mobile_no)."'
                                  ";
        $query_run=mysql_query($query);
        echo mysql_error();
        $success++;                            
     }
}
$part=1;
$parts=1;
对于($row=2;$rowcount();$row++){
$mobile_no=$xls->val($row,1);
$party_name=$xls->val($row,2);
如果($part<$parts){//需要合并行
$message=$message.$xls->val($row,3);
$part++;
}
else{//一条新消息
$message=$xls->val($row,3);
$pattern=“/^\[()\/()-”$party\u name.\]/”;
$part=1;
if(preg_match($pattern,$message,$matches)){
$parts=$matches[2];
}
否则$parts=1;
}
如果($part==$parts){//完成了一条消息
$query=“插入参与方\u excel集合
party\u name=“.mysql\u real\u escape\u字符串($party\u name)。”,
message=“.mysql\u real\u escape\u字符串($message)。”,
moble_no=“.mysql_real_escape_string($mobile_no)。”
";
$query\u run=mysql\u query($query);
echo mysql_error();
$success++;
}
}
我已经将您的循环调整为从2开始,因为您被丢弃了第1行。我已按原样合并了多部分消息,即我没有删除[1/2-SJF]指示器

此外,我更愿意将这些行输出到CSV,然后使用LOAD DATA Infle通过mysql本身一次性插入所有行:


免责声明:此代码未经测试,特别是仔细检查$pattern。

注意开始使用
mysqli.*
PDO
,因为
mysql.*
已被删除并将被删除。请为第一个示例提供一些示例
$part = 1;
$parts = 1;
for ($row=2; $row<=$xls->rowcount(); $row++) {
     $mobile_no=$xls->val($row,1);
     $party_name=$xls->val($row,2);
     if ($part < $parts) { // need to merge rows
        $message = $message . $xls->val($row,3);
        $part++;
     }
     else { // a new message
          $message = $xls->val($row,3);
          $pattern = "/^\[()\/()-" . $party_name . "\]/";
          $part = 1;
          if (preg_match($pattern, $message, $matches)) {
             $parts = $matches[2];
          }
          else $parts = 1;
     }
     if ($part == $parts) { // completed a message
        $query="insert into party_excel set
                    party_name='".mysql_real_escape_string($party_name)."',
                    message='".mysql_real_escape_string($message)."',
                    moble_no='".mysql_real_escape_string($mobile_no)."'
                                  ";
        $query_run=mysql_query($query);
        echo mysql_error();
        $success++;                            
     }
}