1

私はこのコードを持っています:

 for ($i = 0; $i < count($listings); $i++)
    {
                if ($i != 0 && $i%2 == 0)
                   {
                      $endul .= $arr[$i] . '</ul> <hr /> <ul class="listing">';
                   }
                   else
                   {
                      $endul .= $arr[$i];
                   }

そして、2 つのレコードの後に​​閉じようとしていて、次の 2 つのレコードのために再度開くなど...これまでのところ、コードは「ある程度」適切に機能しているように見えますが、最初の 3 つのレコードを取得してから UL を閉じて、最初の2つだけじゃない?

4

6 に答える 6

2

これは私の最初のStackOverflow投稿なので、我慢してください:)

問題はここでこの状態にあります:

if ($i != 0 && $i%2 == 0)

ループを通過するときに$iの値をトレースすると、次のようになります。

$i = 0 ==> false
$i = 1 ==> false
$i = 2 ==> true
$i = 3 ==> false
$i = 4 ==> true

だからそれは印刷されています

    $arr[0] .
    $arr[1] .
    $arr[2] . '</ul> <hr /> <ul class="listing">' .
    $arr[3] .
    $arr[4] . '</ul> <hr /> <ul class="listing">'

この問題を解決するには、if条件を変更する必要があります

if ($i%1 == 1)

お役に立てれば!

于 2013-03-19T18:43:47.167 に答える
1

最初にそれらをチャンクにグループ化してみることができます

$group = 2;
$listings = range("A", "Z");

foreach ( array_chunk($listings, 2) as $set ) {
    printf('<ul class="listing">%s</ul>', implode(array_map(function ($v) {
        return sprintf('<li>%s</li>', $v);
    }, $set)));
}

または

foreach ( array_chunk($listings, 2) as $set ) {
    printf('<ul class="listing">');
    foreach ( $set as $v ) {
        printf('<li>%s</li>', $v);
    }
    printf('</ul>');
}

同じ結果が得られます

<ul class="listing">
    <li>A</li>
    <li>B</li>
</ul>
<ul class="listing">
    <li>C</li>
    <li>D</li>
</ul>
<ul class="listing">
    <li>E</li>
    <li>F</li>
</ul>
<ul class="listing">
    <li>G</li>
    <li>H</li>
</ul>
<ul class="listing">
    <li>I</li>
    <li>J</li>
</ul>

 ....... 
于 2013-03-19T18:41:52.567 に答える
0

これはPerlかPHPですよね?将来、それらの言語でタグ付けするかもしれませんか? とにかく、あなたの問題は、配列がゼロのインデックスで始まることだと思います。

私は推測していますが、 @arr 配列に HTML マークアップを持つ要素が含まれていると仮定しましょう

<li>whatever</li>

ラインアイテム。

あなたの要素を数えましょう:

要素 0 - テストに合格するか? いいえ: 最初の項目を追加しますが、クローズ、ルール、オープンは追加しません。

要素 1 - テストに合格できますか? いいえ: 2 番目の項目を追加しますが、クローズ、ルール、オープンは追加しません。

要素 2 - テストに合格できますか? はい: 3 番目の項目を追加してから、クローズ、ルール、オープンを追加します。

要素 3 - テストに合格できますか? いいえ: 新しい最初の項目を追加しますが、クローズ、ルール、オープンは追加しません。

要素 4 - テストに合格できますか? はい: 新しい 2 番目の項目を追加してから、クローズ、ルール、オープンを追加します。

要素 5 - パターンはご存じでしょう: 閉じる前に 2 つの項目のグループで繰り返します。

このコードは 0 で始まるため、アイテムの最初のグループに 0 と 2 の余分なケースがあります。

インデックスのモジュラスは、偶数ではなく奇数をテストできます。

if ($i%2 == 1)

そして、そのテストは、各奇数要素の後に「レコードクローズ」マークアップを追加する場所で、必要な方法でフォーマットを構築すると思います。最終的なクローズ マークアップを行うには、ループの外側でロジックを作成する必要があると想定しています。もちろん、最後の要素が奇数の場合に備えて、空の順序付けられていないリスト コンテナーを追加することはできますが、そのために何かを追加することはできますか?

于 2013-03-19T18:41:49.770 に答える
0

0 は最初のレコードであり、if ステートメントで明確に除外されます。したがって、$i = 2 である 3 番目のレコードの後まで閉じません。

例:

for ($i = 1; $i < 10; $i++) {
    if ($i % 2 == 0) {
        echo '</ul>';
    }
}

これは私にとってはうまくいきます。

于 2013-03-19T18:20:34.717 に答える
0

この行を変更します。

$endul .= $arr[$i] . '</ul> <hr /> <ul class="listing">';

これに:

$endul .= '</ul> <hr /> <ul class="listing">'.$arr[$i];
于 2013-03-19T18:21:29.543 に答える