我试图从包含数字的自行车型号列表中过滤出结果,例如:"BAJAJ CT100合金“。在使用ctype_alpha()检查结果中的数字之前,我使用str_replace删除了空格。它似乎不起作用。我完全迷路了。这是我的php代码:
$query="SELECT * FROM vehicleList WHERE 1;";
$result=mysqli_query($db,$query);
if(mysqli_num_rows($result) != 0) {
$bikeListArr = array();
$carListArr = array();
while($row=mysqli_fetch_array($result)) {
if($row["type"] == "bike") {
// echo str_replace(' ','',$row["model"]) . "\n";
if(ctype_alpha(str_replace(' ','',$row["model"]))) {
array_push($bikeListArr,$row["id"],$row["model"],$row["category"]);
}
else echo $row["model"] . " -- DROPPED\n";
} else {
array_push($carListArr,$row["id"],$row["model"],$row["category"]);
}
}
// print_r($bikeListArr);
}
下面是输出的一部分:
HERO HF DAWN KICKSTART -- DROPPED
HERO HF DELUXE -- DROPPED
HONDA DREAM NEO -- DROPPED
BAJAJ PLATINA -- DROPPED
HERO SPLENDOUR -- DROPPED
有趣的是,传递了下面的值:
"TVS STAR CITY PLUS","HERO PASSION X PRO","HERO GLAMOUR","HERO HUNK"
找不到哪里不对劲。如果有任何帮助,我将不胜感激。
发布于 2017-07-16 08:58:58
我终于找到了问题的原因。数据库表由一个PHP脚本填充,该脚本从Windows的.TXT文件中读取行,并将"vehiclelist“表中的"model”列提供给它。
你猜怎么着?Windows操作系统中的记事本需要同时使用\r
和\n
来表示换行符。(来源:Windows notepad not supporting newline character '\n')。PHP只将\n
字符识别为换行符,所以\r
字符被留在大多数行的末尾(仍然没有找到为什么所有行都没有它的原因)。在表的所有行上使用trim()
进行简单的更新就完成了这项工作,代码现在运行得很好。万岁!!
用于更新表的代码片段:
$db=mysqli_connect("127.0.0.1","root","","mdb") or die("DB Timeout... Please try again");
$query="SELECT * FROM vehiclelist WHERE 1;";
$result=mysqli_query($db,$query);
while($row=mysqli_fetch_array($result)) {
$query1="UPDATE vehiclelist SET model=\"" . trim($row["model"]) . "\" WHERE id=\"" . $row["id"] . "\";";
$result1=mysqli_query($db,$query1);
}
$bikeListArr
数组的一个简单的模型显示了对应于“var_dump()
”值的字符串大小的异常。
这真的是浪费每个人的时间。很抱歉我之前没能看到这一点。
感谢所有人的回答和时间。
https://stackoverflow.com/questions/45124536
复制相似问题