1

HTML メニューがいくつかあります。最大幅は 990px​​ です。今、私は配列からこのメニューを印刷し、これらのメニュー list( <li>) を 1 行で作成したいと考えています。保存された計算のために、パディング スペースまたは各メニュー リストを削除します。foreach から合計単語数を 200 文字以内に制限するにはどうすればよいですか? 私のコードでは、配列を文字列にグループ化してから、文字列の長さを切り取ります。これは良い考えではありません。

$a = array("item1","item2","item3" ... "item30");//'item' would be change to any other words.

foreach($a as $b){
   $c.=$b.'|';
}
function limitString($string, $limit = 200) {
    if(strlen($string) < $limit) {return $string;}
    $regex = "/(.{1,$limit})\b/";
    preg_match($regex, $string, $matches);
    return $matches[1];
}
$d = explode('|',limitString($c));
foreach($d as $e){
   echo '<li><a href="">'.$e.'</li>';
}

たとえば、 の 200 番目の文字をitem20に分割する必要がある場合item19、この foreach で 19 個のメニュー リストを出力します。

4

3 に答える 3

1

substr()他のコメントが言うように使用できます。単語の分割を維持するには、このスレッドを参照してください。

とにかく、文字列の物理的な長さを操作するためのより良い方法がありますが、それには JavaScript が必要です。

測定したい文字列を含む非表示の div を作成し、幅と高さを取得するだけです。どうしてそうするか?もちろん、各文字の幅が異なるため、さまざまな OS のさまざまなブラウザーでもフォントが少しずつ表示されます。

于 2013-04-26T14:42:54.620 に答える
1

次のことを試してください。

$array = array("item1","item2","item3", "item4", "item5", "item6", "item7", "item8", "item9", "item10", "item11", "item12", "item13", "item14", "item15", "item16", "item17", "item18", "item19", "item20", "item21", "item22", "item23", "item24", "item25", "item26", "item27", "item28", "item29", "item30", "item31", "item32", "item33", "item34", "item35", "item36", "item37", "item38", "item39", "item40", "item41", "item42", "item43", "item44", "item45", "item46", "item47", "item48", "item49", "item50", "item51", "item52", "item53", "item54", "item55", "item56", "item57", "item58", "item59", "item60", "item61", "item62", "item63", "item64", "item65", "item66", "item67", "item68", "item69", "item70", "item71", "item72", "item73", "item74", "item75", "item76", "item77", "item78", "item79", "item80", "item81", "item82", "item83", "item84", "item85", "item86", "item87", "item88", "item89", "item90", "item91", "item92", "item93", "item94", "item95", "item96", "item97", "item98", "item99", "item100");
$max = 200;


$length = 0;
$menu_items = array();
foreach($array as $value){
    $length += strlen($value);
    if($length <= $max){
        $menu_items[] = $value;
    }else{
        break;
    }
}

// Outputing the menu:
echo '<ul><li>'. implode('</li><li>', $menu_items) .'</li></ul>';

オンラインデモ

于 2013-04-26T14:54:29.810 に答える
0

この部分で確認できます:

foreach($a as $b){
if(strlen($c)<200)  $c.=$b.'|'; else return;
}
于 2013-04-26T14:45:06.880 に答える