PHP分析二维数据表(长度|数字字段|空值|纯姓名|英文用户名|科学计数|是否等长|是否唯一)

先看图,后有完整代码 

 

<?php
$t = "Excel数据转Sql查询系统字段半智能分析";
$s = "Excel复制过来的二维结构表内容,分析查询条件!";
$x = "字段|最大长度|长度有|数字字段|空值存在|纯姓名|英文用户名|科学计数|是否等长|是否唯一";
$xx= explode("|",$x);
function isname($str) {
    $pattern = '/^[\x{4e00}-\x{9fa5}]{2,8}$/u'; // Unicode编码范围内的汉字
    return preg_match($pattern, $str);
}
function isuser($str) {
    $pattern = '/^[a-zA-Z0-9_\-]{6,18}$/'; //
    return preg_match($pattern, $str);
}
$tt=array();
$tt["空值存在"]="查询条件列内容如果空值则查询不到";
$tt["纯汉字姓名特征"]="是(2-6汉字):适合查询条件";
$tt["英文用户名特征"]="是(6-16字母数字):适合查询条件";
$tt["科学计数"]="数值已科学计数,会影响数值精度和人眼识别;如果是查询条件则查询不到!";
$datedir = "";
if($_GET["x"] == "cha"){
$base = isset($_POST['tips']) ? $_POST['tips'] : "";
$files="S2".date("YmdHis");
$uptis = "上传失败:";
if(!stristr($base,"\t"))$uptis .= "制表符;";
if(!stristr($base,"\n"))$uptis .= "回车符;";
if($uptis<>"上传失败:") exit("提交内容由Excel复制过来:应当包含:".$uptis);
file_put_contents($datedir.$files.".csv", $base);

$file = fopen($datedir.$files.".csv", 'r');
$header = fgetcsv($file, 0, "\t");
 $nozd  = count($header); $jj=0;
$max_lengths = array_fill(0, $nozd, 0); //字段最长
$lengths = []; //字段长度
$strlist = []; //字段集合
$lies = []; //字段集合
$num_str = array_fill(0, $nozd, "是"); //是否全数字
$is_null = array_fill(0, $nozd, "No"); //是否空值
$is_user = array_fill(0, $nozd, "<b>是</b>");
$is_name = array_fill(0, $nozd, "<b>是</b>");
while (($line = fgetcsv($file,0,"\t")) !== false) {
  $jj ++; if(count($line)<>$nozd) $lies[] = $jj;
  foreach ($line as $i => $value) {
    $strlist[$i][] = $value;
    $lenx = strlen($value);
    $lengths[$i][] = strlen($value);
    if( Trim($value)=="" ) $is_null[$i] = "<b>是</b>";
    if( !is_numeric($value) ) $num_str[$i] = "否";
    if( !isuser($value) ) $is_user[$i] = "否";
    if( !isname($value) ) $is_name[$i] = "否";
    $max_lengths[$i] = max($max_lengths[$i], strlen($value));
  }
}
fclose($file);
echo "<h3>分析结果:<strong>机器识别,仅供参考</strong></h3>\r\n";
echo "<table cellspacing=\"0\" class=\"table\" cellpadding=\"0\">\r\n";
echo "<tr class='tt'><td>".join("</td><td>",$xx)."</td></tr>\r\n";
for($ii=0;$ii<$nozd;$ii++){
 $line = [];
 $uni = array_count_values($strlist[$ii]); $una = array_keys($uni); $unb = join(";",$una);
 $lilen = array_unique($lengths[$ii]); $listl = join(",",$lilen);
 $line["字段"] = $header[$ii];
 $line["最长长度"] = $max_lengths[$ii];
 $line["字段长度有"] = $listl;
 $line["字段属性"] = $num_str[$ii];
 $line["空值存在"] = $is_null[$ii];
 $line["汉字名字"] = $is_name[$ii];
 $line["用户名"] = $is_user[$ii];
preg_match_all("/[+-]?[\d]+([\.][\d]+)?[Ee][+-]?[\d]+/", $unb, $match);
$kes = count($match[0]); 
if($kes>0){ $line["科学计数"] = "异常<b>$kes</b>处";}else{ $line["科学计数"] = "正常";} 
 if(count($lilen)==1) $line["是否等长"] = "是"; else $line["是否等长"] = "否";
 $isc = array_diff($uni, [1]);
 if(count($isc)<1) $line["是否唯一"] = "是"; else $line["是否唯一"] = "否";
 echo "<tr><td>".join("</td><td>",$line)."</td></tr>\r\n";
}
echo "</table>\r\n";
echo "<p><b>请核对:</b>核对数据:{$jj}行{$nozd}列</p>\r\n";
if(count($lies)>0) echo "<p><b>有".count($lies)."行</b>(行:".join(",",$lies).")列数与标题列数({$nozd})不一致</p>\r\n";
foreach($tt as $ti=>$tv){ echo "<p><b>$ti</b>: $tv</p>";}
 exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title><?php echo $t; ?></title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes" />
<script type="text/javascript">
console.log("问题反馈电话:","15058593138");
console.log("问题反馈邮件:","admin@12391.net");
function $(objId){
return document.getElementById(objId);
}
function loadcha(xid) {
var xmlhttp;
var Stxt= "nums=aa";
Stxt+="&tips="+ encodeURIComponent($("tips").value);
//$("tips").innerHTML = "正在加载...";
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var btxt = xmlhttp.response;
if(btxt == "err01"){ $("tipx").innerHTML = "!"; return false;}
$('tipx').innerHTML = xmlhttp.response;
}
}
xmlhttp.open("POST", "?x=cha&tt="+Math.random(), true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(Stxt);
}
 
</script>
<style>
div,#tipx{display:block;width:99.7%;border:0;margin-top:5px;}
textarea{display:block;width:99.7%;border:1px solid #ccc;height:160px;}
table{margin:20px auto;border-left:1px solid #a2c6d3;border-top:3px solid #0180CF;font-size:12px;width:99.7%;}
table td{border-right:1px solid #a2c6d3;border-bottom:1px solid #a2c6d3;padding:2px;word-wrap:break-word;word-break:break-all;}
td{min-width:30px;max-width:490px;}
.tt{background-color: #f2f2f2;}
b{color:red;}
#submit{ height:35px;}
</style>
</head>
<body>
 
<form class="form" id="form" method="POST" act="?act=cha" >
<p><?php echo $t; ?></p>
<textarea id="tips">
姓名	学号	身份证	科目1	科目2	科目3	科目4	科目5	科目.	科目N
李一一	10001001	90001001	87	84	75	91	83	76	87
李二	10001002	90001001	95	81	81	71	60	8299
李三	10001003	90001003	68	80	65	79	68	71	91
李四	10001004	90001004	82	80	75	90	87	1.23457E+15	81
李五	10001005	90001005	60	64	61	71	73		61
李六	10001006	90001006	62	69	77	73	96	6	82
李七	10001007	90001007	98	72	68	59	84	333	92
</textarea>
 <input type="button" id="submit" value="提交分析" onclick="loadcha('xid')">
<div id="tipx"></div>
 </form>
</body>
</html>

仅供娱乐!

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-21 09:00:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-21 09:00:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-21 09:00:03       82 阅读
  4. Python语言-面向对象

    2024-02-21 09:00:03       91 阅读

热门阅读

  1. HTTP 状态消息

    2024-02-21 09:00:03       48 阅读
  2. Nginx返回502错误提示问题原因常用解决方法

    2024-02-21 09:00:03       47 阅读
  3. 3.普通函数与函数模板的调用规则

    2024-02-21 09:00:03       51 阅读
  4. c语言游戏实战(9):球球大作战

    2024-02-21 09:00:03       52 阅读
  5. open3d 0.17.0的open3d.visualization.ViewControl类有bug

    2024-02-21 09:00:03       43 阅读
  6. 为BUG编程:成员变量用指针char const *导致的BUG

    2024-02-21 09:00:03       49 阅读
  7. 【解析】C语言两个实例

    2024-02-21 09:00:03       44 阅读