アプリ版:「スタンプのみでお礼する」機能のリリースについて

foreachで配列を、左から順番に、縦3列で表示したいのですが、どうすれば良いでしょうか?
※CSSでulタグを縦表示指定してます

■表示したいタグ
<ul>
 <li></li>
 <li></li>
</ul>
<ul>
 <li></li>
 <li></li>
</ul>
<ul>
 <li></li>
 <li></li>
</ul>

■やりたいこと(10件だった場合)
・3で割ってちょうどいい感じにして、さらに一番左から縦に順番に表示させていきたい
<ul>
 <li>1</li>
 <li>2</li>
 <li>3</li>
 <li>4</li>
</ul>
<ul>
 <li>5</li>
 <li>6</li>
 <li>7</li>
</ul>
<ul>
 <li>8</li>
 <li>9</li>
 <li>10</li>
</ul>

■現状(一番左に表示されるだけ)
<ul>
 <?php foreach ($arrdata as $data): ?>
 <li><?php echo $data['a']; ?></li>
 <?php endforeach; ?>
</ul>
<ul>
 <li></li>
 <li></li>
</ul>
<ul>
 <li></li>
 <li></li>
</ul>

・どうしたら良いでしょうか?

A 回答 (3件)

関数をどっかにしまって、きれいに書きたいなら


こんな感じはどうですか?

最初の $arrdata = array( というところは、サンプル用なので、
消して下さいね~

make_colsの第2引数は列の数です。

<?php
$arrdata = array("sample1", "sample2", "sample3", "sample4", "sample5", "sample6", "sample7", "sample8", "sample9", "sample10", "sample11", "sample12", "sample13" );

function make_cols($args, $col_num){
$result = array();
$cnt = 0;

$len = count($args);
$one_col = floor( count($args)/$col_num );
$over_num = $len%$one_col;

while($col_num){
$slice_len = ($over_num > 0) ? ($one_col+1) : $one_col;
$result[] = array_slice($args, $cnt, $slice_len);

$cnt += $slice_len;
--$over_num;
--$col_num;
}

return $result;
}
?>

<?php $arrdata = make_cols($arrdata, 3); ?>

<?php foreach($arrdata as $data): ?>
<ul>
<?php foreach($data as $value): ?>
<li><?php echo $value; ?></li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2013/02/25 09:00

要は配列を適切に区切れるかという問題なので、配列のサイズをN、分割数をc、Nをcで割った時の商をq、剰余をm(すなわちN=q*c+m)としたとき、ある列i(0<=iかつi<c)におけるアクセスすべき配列の添え字(b..e)は、


b = i * q + (i < m ? i : m );
e = b + q - 1 + (i < m ? 1 : 0);
――でいけるかと。
参考URLは実験コード。書きやすいのでruby。

参考URL:http://ideone.com/h83JfZ
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2013/02/25 09:00

3で割った余りを利用して0の時にリセット(</ul><ul>を挿入)する処理にすればいいだけ。

    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2013/02/25 09:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!