0

名前が非常に多くの文字を超える場合に名前を短くするコードをいくつか作成しました(イニシャルの名前を短くし、ミドルネームを削除し、姓が全体的に長すぎる場合は収まるまで短くします).

私はこの作業のバージョンを持っていました (これは私の現在のコードの後に​​投稿されています) が、いくつかの while ループで試してみると、ループ (9 行目) の最初の if で予期しない { について不平を言います。

現在のコード:

<?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にかなり慣れていませんが、状況によってはwhileループ内にifを配置できない場合を除いて、これに問題はありませんが、いくつかの調査を行った結果、そうであることがわかりませんでした。

動作していた私の古いコードは次のとおりです。

<?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ループと関係があるに違いないと確信していますが、何がわかりません。

どんな助けでも大歓迎です、ありがとう。

4

1 に答える 1