前言
在做excel数据导入到数据库表的过程中需要验证excel中的版本号一栏中的版本号是否连续。
版本号格式:1,1.1,1.2,1.2.1,2,2.1,2.2,2.2.1(正确)
版本号格式:1,1.1,1.1,1.2.1,2,2.1,2.2,2.2.1(错误)
版本号格式:1,1.2,1.1,1.2.1,2,2.2,2.1,2.1.1(错误)
这里需要用到php中的字符串函数,strpos,strrpos,substr。
/**
* 判断编号是否连续,编号格式:1,1.1,1.2,1.2.1,2,2.1,2.2,2.2.1
* @param $data
* @param string $mark
* @return void
*/
function judge_code_continuity($data, $errData = [], $mark = '.')
{
foreach ($data as $key => $val) {
if (!empty($val)) {
//判断是否存在重复编号
if (in_array($val, array_slice($data, 0, $key))) {
$errData[] = "编号" . $key . "存在重复,请检查以后重新上传";
break;
}
if ($key == 0) {
} else if (!strpos($val, $mark)) {
if (!in_array($val - 1, array_slice($data, 0, $key))) {
$errData[] = $val . "编号存在顺序错误,请检查以后重新上传";
break;
}
} else {
$position = strrpos($val, $mark, 0);
$temp = substr($val, $position + 1, strlen($val) - $position) - 1;
$profit = substr($val, 0, $position);
$pointPosition = strrpos($profit, $mark, 0);
$pointBefore = substr($profit, 0, $pointPosition);
$pointAfter = substr($profit, -1, $pointPosition);
if ($temp == 0) {
if (!in_array(substr($val, 0, $position), array_slice($data, 0, $key))) {
$errData[] = $val . "编号存在顺序错误,请检查以后重新上传";
break;
}
} else {
if (!in_array(substr($val, 0, $position) . "." . ($temp), array_slice($data, 0, $key))) {
$errData[] = $val . "编号存在顺序错误,请检查以后重新上传";
break;
}
}
if ($pointBefore && in_array($pointBefore . "." . ($pointAfter + 1), array_slice($data, 0, $key))) {
$errData[] = $val . "编号存在顺序错误,请检查以后重新上传";
}
}
} else {
continue;
}
}
return $errData;
}
这里会把一串版本号中不正确的返回错误信息。