0

PHP配列の結果のグループをオフセットして、複数行のデータを作成しようとしています。

たとえば、最初の行には最初の4つの配列結果が含まれ、2番目の行には結果5〜8が表示され、3番目の行には結果9〜12が含まれます。

現在、12個すべてを1つのリストに印刷していますが、もう少し表示制御が必要です(つまり、結果をそれぞれ独立してスタイル設定できる列に並べ替える)。そのため、結果をオフセットしたいと思います。

私の現在のPHPは以下のとおりです。

<?php    
if (empty($tmdb_cast['cast'])) {

} else {?>
    <section class="cast">
        <p class="title">Cast</p>
        <ul class="section_body"><?php
            foreach($tmdb_cast['cast'] as $key => $castMember){
                if ($key < 12) {?>
                    <li class="actor_instance clearfix"><?php
                        if ($castMember['profile_path'] != '') {?>
                            <img src="http://cf2.imgobject.com/t/p/w45<?php echo $castMember['profile_path']; ?>" class="actor_image pull-left" alt="<?php echo $castMember['name']; ?>" title="<?php echo $castMember['name']; ?>" /><?php
                        } else {?>
                            <img src="assets/images/castpic_unavailable.png" class="actor_image pull-left" alt="No image available" title="No image available" /><?php
                        }?>
                    <p class="actor"><?php echo $castMember['character']; ?> - <a href="actor.php?id=<?php echo $castMember['id']; ?>"><?php echo $castMember['name']; ?></a></p>
                    </li><?php
                }
            }?>

            <div class="morecast pull-right"><a href="http://www.imdb.com/title/<?php echo $imdb_id; ?>/fullcredits" title="View full cast list on IMDb">[...view all cast]</a></div>
        </ul>
    </section><?php
}?>

PS上記のブロックのコードをどのようにフォーマットしたかについてお詫びします-StackOverflowでコードを「見栄えよく」見せるための方法がまだ100%わかりません。

4

3 に答える 3

2

array_chunk1次元配列を2D配列に分割するために使用します。次に、各チャンク、次に各結果をループして、それらの間の「オフセット」効果を取得できます。

$chunks = array_chunk($tmdb_cast['cast'], 4); // 4 here, is the number you want each group to have 

foreach($chunks as $key => $chunk)
{
    foreach($chunk as $castMember) 
    {
         //display castMember here
    }
    // add code between groups of 4 cast members here
}
于 2013-02-24T12:29:20.667 に答える
0

まず、このようにphpとhtmlを混合するのは非常に悪い習慣です...ある日はコードを維持する必要があり、その日は1つのファイルに異なる言語を混合したために机全体に嘔吐します...そうは言っても。 。そして新しい配列を作成せずに:

foreach($tmdb_cast['cast'] as $key => $castMember)
{
    if ($key < 12)
    {
        // your code goes here

        // if key is 3, or 7 the code below will close the listcontainer and open a new one...
        if( ($key+1)%4 == 0 AND $key <11)
            echo '</ul> <ul class="section_body">';
    }
}

また、これを置き換えます:

if (empty($tmdb_cast['cast']))
{
}
else {

これとともに:

if (!empty($tmdb_cast['cast']))
{
于 2013-02-24T12:34:08.223 に答える
0

何を探しているのか完全にはわかりませんが、コードをフォーマットする方法は次のとおりです。'if'の代替構文はもう少し読みやすく、 foreachの代わりにforループを使用すると、探している行番号を制御できます。

<?php   if( ! empty($tmdb_cast['cast'])): ?>
    <section class="cast">
        <p class="title">Cast</p>
        <ul class="section_body">
<?php
            for($i = 0; $i < 12; $i++):
            $castMember = $tmdb_cast['cast'][$i];
?>
            <li class="actor_instance clearfix">
<?php           if($castMember['profile_path'] != ''): ?>
                <img src="http://cf2.imgobject.com/t/p/w45<?php echo $castMember['profile_path']; ?>" class="actor_image pull-left" alt="<?php echo $castMember['name']; ?>" title="<?php echo $castMember['name']; ?>" />
<?php           else: ?>
                <img src="assets/images/castpic_unavailable.png" class="actor_image pull-left" alt="No image available" title="No image available" />
<?php           endif; ?>
                <p class="actor"><?php echo $castMember['character']; ?> - <a href="actor.php?id=<?php echo $castMember['id']; ?>"><?php echo $castMember['name']; ?></a></p>
            </li>
<?php       endfor; ?>

            <div class="morecast pull-right"><a href="http://www.imdb.com/title/<?php echo $imdb_id; ?>/fullcredits" title="View full cast list on IMDb">[...view all cast]</a></div>
        </ul>
    </section>
<?php   endif; ?>
于 2013-02-24T12:48:52.787 に答える