名前が非常に多くの文字を超える場合に名前を短くするコードをいくつか作成しました(イニシャルの名前を短くし、ミドルネームを削除し、姓が全体的に長すぎる場合は収まるまで短くします).
私はこの作業のバージョンを持っていました (これは私の現在のコードの後に投稿されています) が、いくつかの 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ループと関係があるに違いないと確信していますが、何がわかりません。
どんな助けでも大歓迎です、ありがとう。