【问题标题】:If Statement within While LoopWhile 循环中的 If 语句
【发布时间】:2013-11-07 19:23:44
【问题描述】:

我已经编写了一些代码,如果名字超过这么多字符,我会缩短名字(缩短名字的首字母,删除中间名,如果姓氏整体太长,则缩短直到适合)。

我有这个工作的版本(在我当前的代码之后发布),但现在我用一些 while 循环尝试它,它抱怨循环中的第一个 if 出现意外 {(第 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 放置在 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 循环有关,但不知道是什么。

非常感谢任何帮助,谢谢。

【问题讨论】:

  • if ((strlen($nameEx[0])&gt;1) - 打开的括号比关闭的多一个。
  • 请留下我的名字。

标签: php loops if-statement while-loop


【解决方案1】:

抛开功能不谈,您的代码中充斥着语法错误和不必要的括号。试试这个:

$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

【讨论】:

  • 非常抱歉或业余语法错误,但在解决此代码时遇到问题,它不会加载任何东西,我认为它陷入了无限循环,现在正在修复您发布的代码。
猜你喜欢
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 2014-01-21
  • 2015-11-08
  • 2016-01-12
  • 2013-11-01
  • 1970-01-01
相关资源
最近更新 更多