我制作了一些代码,如果名称超过这么多字符,则会缩短名称(缩短首字母的名字,删除中间名,如果姓氏总体上太长,则缩短直到适合)。
我有这个工作的版本(在我当前的代码之后发布),但现在我尝试了一些 while 循环,它抱怨在循环中的第一个意外 {(第 9 行)。
当前代码:
<?php
$name = "billy bobby sharkingflardo herdaderpingtonning";
while ((strlen($name))>17)
{
$nameEx = explode(" ",$name);
if ((strlen($nameEx[0])>1)
{
$nameEx[0] = substr($nameEx[0], 0, -(strlen($nameEx[0])-1));
}
while ((count($nameEx))>2)
{
unset($nameEx[1]);
}
if ((strlen($nameEx[1]>15))
{
substr($nameEx[1], 0, -1);
}
$name = implode(" ",$nameEx);
}
echo $Name
?>
我对 PHP 仍然相当陌生,但我看不出这有什么问题,除非在某些情况下你不能放置 if in while 循环,但通过做一些研究,我没有发现情况是这样。
我的旧代码工作如下:
<?php
$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('amazondb', $conn);
$result = mysql_query("SELECT * FROM imported_orders");
while($row = mysql_fetch_array ($result))
{
$nL = strlen($row['RecipientName']);
echo "<br><b>Name:</b> ".$row['RecipientName']."<br>";
echo "<b>Names Length:</b> ".$nL."<br>";
if ($nL>17)
{
$nameEx = explode(" ",$row['RecipientName']);
if ((count($nameEx))>2)
{
unset($nameEx[1]);
$nameEx[0] = substr($nameEx[0], 0, -(strlen($nameEx[0])-1));
}
$name = implode(" ",$nameEx);
echo "<b>New Name:</b> ".$name."<br>";
echo "<b>New Length:</b> ".strlen($name)."<br>";
}
}
?>
这段代码适用于我的 sql 数据库,但它没有考虑多个中间名,以及姓氏是否太长。
我敢肯定,这一定与while循环有关,但不知道是什么。
非常感谢任何帮助,谢谢。
撇开功能不谈,你的代码充斥着语法错误和不必要的括号。试试这个:
$name = "billy bobby sharkingflardo herdaderpingtonning";
while (strlen($name) > 17) { // removed extra parentheses around strlen()
$nameEx = explode(' ', $name);
if (strlen($nameEx[0] > 1)) { // removed extra and fixed unclosed parentheses
$nameEx[0] = substr($nameEx[0], 0, -(strlen($nameEx[0]) - 1));
}
while (count($nameEx) > 2) { // removed extra and fixed unclosed parentheses
unset($nameEx[1]);
}
if (strlen($nameEx[1] > 15)) { // removed extra and fixed unclosed parentheses
substr($nameEx[1], 0, -1);
}
$name = implode(' ', $nameEx);
}
echo $Name; // added missing semicolon