0

ポートフォリオスクリプトのアイテム数を制限しようとしています。

  <?php
    $k = 1;     
    shuffle($items);
    foreach ($items as $item ){ 
    if($k==11) break; ?>
    <li data-id="id-<?php echo($k);  ?>" data-type="<?php echo( ereg_replace("[^A-Za-z0-9]", "", $item->item_category) ); ?>">
    ..........more item listings ....
    </li>
    <?php $k++; }   ?>

コードにシャッフルを追加したので、さまざまなカテゴリからさまざまな結果が得られ、結果の総数を制限できます。しかし、どうすればカテゴリごとのアイテム数を制限できますか?各カテゴリから5つのアイテムを取得して、それらをシャッフルするのが好きですか?

プラグインの一部であるため、全体的な機能を変更することはできません。ただし、コードにいくつかの変更を加えることは可能です。何か案は?

ありがとうございました :)

4

3 に答える 3

0

foreachの代わりに使用する

<?php
    $values = shuffle($items);
    for ($k=0 ;$items[k] && $k<11;$k++ ){ 
    >
    <li data-id="id-<?php echo($k);  ?>" data-type="<?php echo( ereg_replace("[^A-Za-z0-9]", "", $items[$k]->item_category) ); ?>">
    ..........more item listings ....
    </li>
    <?
}   

?>
于 2013-02-04T19:37:32.060 に答える
0

これを行うための最良の方法は、再結合してシャッフルする前に、各アイテムを5つフェッチすることです。

于 2013-02-04T19:17:46.440 に答える
0

受信データのカテゴリごとの項目数を制限できない場合は、入力時にそれらをカウントするためのデータ構造が必要です。

<?php
$k = 1;
$max_per_category = 5;
$cat_tracker = array();

shuffle($items);

foreach ($items as $item ){ 
    if( $k >= 11 ) {
        break;
    }

    if( ! isset($cat_tracker[$item->item_category]) ) {
        $cat_tracker[$item->item_category] = 1;
    } else if( $cat_tracker[$item->item_category] >= $max_per_category ) {
        continue;
    } else {
        $cat_tracker[$item->item_category]++;
    }

    $frame = '<li data-id="id-%d" data-type="%s">';
    printf($frame, $k, ereg_replace("[^A-Za-z0-9]", "", $item->item_category));
    // more item listings?
    printf('</li>');

    $k++;
}

また、出力コードをよりクリーンなものに置き換えました。このような PHP へのドロップインとドロップアウトは、読み取りと保守が困難です。

于 2013-02-04T19:19:58.980 に答える