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