- ベストアンサー
foreachで配列を縦3列に表示する方法とは?
- foreachを使用して配列を縦3列で表示する方法を知りたいです。
- 現在は一番左にだけ表示されており、一番左から順番に縦に表示させたいです。
- CSSでulタグを縦表示に指定していますが、具体的な方法が分かりません。
- みんなの回答 (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; ?>
その他の回答 (2)
- osamuy
- ベストアンサー率42% (1231/2878)
要は配列を適切に区切れるかという問題なので、配列のサイズを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
お礼
回答ありがとうございましたー
- oioi_douda
- ベストアンサー率35% (21/59)
3で割った余りを利用して0の時にリセット(</ul><ul>を挿入)する処理にすればいいだけ。
お礼
回答ありがとうございましたー
お礼
回答ありがとうございましたー