-
ID:A9LVqT さんの質問

PHP 初心者です。ループについて質問させてください。
以下のような配列の中身を3つずつループさせたいのですが、方法が分かりません。

【配列】
array {
[0]=>
array {
["title"]=> "タイトル1"
["content"]=> "コンテンツ1"
}
[1]=>
array {
["title"]=> "タイトル2"
["content"]=> "コンテンツ2"
}
[2]=>
array {
["title"]=> "タイトル3"
["content"]=> "コンテンツ3"
}
[3]=>
array {
["title"]=> "タイトル4"
["content"]=> "コンテンツ4"
}
[4]=>
array {
["title"]=> "タイトル5"
["content"]=> "コンテンツ5"
}
[5]=>
array {
["title"]=> "タイトル6"
["content"]=> "コンテンツ6"
}
[6]=>
array {
["title"]=> "タイトル7"
["content"]=> "コンテンツ7"
}
[7]=>
array {
["title"]=> "タイトル8"
["content"]=> "コンテンツ8"
}
[8]=>
array {
["title"]=> "タイトル9"
["content"]=> "コンテンツ9"
}
}

【出力】
<ul class="title">
<li>タイトル1</li>
<li>タイトル2</li>
<li>タイトル3</li>
</ul>

<div class="content">
<div class="content">コンテンツ1</div>
<div class="content">コンテンツ2</div>
<div class="content">コンテンツ3</div>
</div>

<ul class="title">
<li>タイトル4</li>
<li>タイトル5</li>
<li>タイトル6</li>
</ul>

<div class="content">
<div class="content">コンテンツ4</div>
<div class="content">コンテンツ5</div>
<div class="content">コンテンツ6</div>
</div>

<ul class="title">
<li>タイトル7</li>
<li>タイトル8</li>
<li>タイトル9</li>
</ul>

<div class="content">
<div class="content">コンテンツ7</div>
<div class="content">コンテンツ8</div>
<div class="content">コンテンツ9</div>
</div>

上記のように出力できる方法があれば教えてください。よろしくお願いします。

みんなの回答 5 件

ID:rGYDqd さんの回答

普通にPHPなら条件分岐でやるしかないんじゃないかな。
Rubyなら3つずつループとかできるけど。

ID:sRioIw

grヴぁえsw

ID:qCaLjH さんの回答

ヒント1:上の回答者も初心者だから気にしないこと

ヒント2:手続き型言語(オブジェクト指向含む)一般に通用する基礎の基礎として2重ループの例を示す。
for($i = 0; $i < 3; $i++){
 echo ’A’;
 for($j = 0; $j < 3; $j++){
  echo $i * 3 + $j;
 }
 echo ’B’;
}
出力は A,0,1,2,B,A,3,4,5,B,A,6,7,8,B の順だわな。
がんばれトピ主!

ID:g1AJdu さんの回答

n件ずつって決まってるならforをi+nにしてブロック毎出力で回せば?

ID:Z4wKSg さんの回答

a .= ul
b .= div

a .= 1
b .= 1
|
a .= 3
b .= 3

a .= /ul
b .= /div

echo a
echo b

*3

プログラマじゃないけど、こんな感じじゃいかんのか

ID:Z4wKSg

考え方てきに

ID:lIsQP1 さんの回答

phpは配列系の関数がたくさん用意されてるので、大抵の要望に答えられる。
今回みたいな場合は array_chunk() が便利かな?
困ったらPHPマニュアルの配列関数一覧ページを眺めてみると良いと思う。
以下、 $posts に該当の配列が入っていると仮定し、htmlspecialchars()をh()と略記できるようにしていた場合の例。
----
<?php $grouped_posts = array_chunk($posts, 3); ?>
<?php foreach($grouped_posts as $group): ?>
<ul class="title">
<?php foreach($group as $p): ?>
<li><?php echo h($p[’title’]); ?></li>
<?php endforeach; ?>
</ul>
<div class="content">
<?php foreach($group as $p): ?>
<div class="content"><?php echo h($p[’content’]); ?></div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>

PHP: array_chunk - Manual

http://php.net/manual/ja/function.array-chunk.php
ID:y2zqNS

これが最適解。

ID:OGWIIr

相手が初心者なんだからifとforのループで回答書いたほうが出来る子に育つと思うが。まー関係ないか。

ID:lIsQP1

まぁ、それは上の人が書いてくれてるから良いかな、と。
伝えたかったのは

  • PHPならこういう方法もある
  • 困ったらマニュアルを見るとこういう便利な関数を見つけられるかもしれない
    という2点ということで。
最終更新日:2014-10-20 (3,569 views)

関連するトピックス

ページ上部に戻る