PHPで作成した多次元配列をSmartyでループして表示する方法について。(添え字が全て文字列の場合で、ループ回数を固定したい。)
こんにちわ。
以下のような配列があるとします。
$abcde = array("sakana" => array("aaa" => "あじ","bbb" => "ひらめ"),"oyasai" => array("ggg" => "ふき","hhh" => "トマト"),"niku" => array("eee" => "ぶた","ooo" => "鳥"));
echo "<pre>";
print_r($abcde);
echo "</pre>";
この配列をSmartyに渡し、以下の条件でループして表示したいのですが、いい方法はありますでしょうか。
・ループ回数は二回
・一番最初の添え字(sakana、oyasai、niku)の値を使わずに表示したい。(自動的に上から順番に取り出してほしい)
foreachだと全ての値が表示されてしまい、sectionだとうまく表示されませんでした。
↓こんな感じで表示したいです。(ループ二回なので肉は表示せず)
魚 :あじ、ひらめ
野菜:ふき、トマト
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
No3です
>私が実現したいのは、添え字(ここでいうsakanaやoyasai)を使わずに回数を二回ループしたいんです。
出来ればSmartyで回したいのですが、難しいでしょうか・・。
念のため確認したいのですが、
「魚:」「野菜:」という部分は必要なのでしょうか?
必要ないのであれば以下のように添え字なしでも処理ができます。
{foreach from=$abcde key="key" item="item" name="loopName"}
{if $smarty.foreach.loopName.iteration <= 2}
{foreach from=$abcde.$key key="key" item="item2"}
{$item2}
{/foreach}
{/if}
<br>
{/foreach}
また、別の方法として回数が1回目だったら魚と表示するのでしたら、
{foreach from=$abcde key="key" item="item" name="loopName"}
{if $smarty.foreach.loopName.iteration <= 2}
{if $smarty.foreach.loopName.iteration == 1}
魚:
{elseif $smarty.foreach.loopName.iteration == 2}
野菜:
{/if}
{foreach from=$abcde.$key key="key" item="item2"}
{$item2}
{/foreach}
{/if}
<br>
{/foreach}
という方法もありますが、いかがでしょう?
No.3
- 回答日時:
No2です。
すいません。勘違いしておりました><
回数での条件ということですので、以下のほうが良いですね。
{foreach from=$abcde key="key" item="item" name="loopName"}
{if $smarty.foreach.loopName.iteration <= 2}
{if $key == 'sakana'}
魚:
{elseif $key == 'oyasai'}
野菜:
{/if}
{foreach from=$abcde.$key key="key" item="item2"}
{$item2}
{/foreach}
{/if}
<br>
{/foreach}
この回答への補足
回答ありがとうございます。
私が実現したいのは、添え字(ここでいうsakanaやoyasai)を使わずに回数を二回ループしたいんです。
出来ればSmartyで回したいのですが、難しいでしょうか・・。
No.2
- 回答日時:
$smarty->assign('abcde', $abcde); //この名前でSmartyに渡したとして
?>
{*--- ここからSmartyのプログラム ---*}
{foreach from=$abcde key="key" item="item"}
{if $key == 'sakana'}
魚:
{elseif $key == 'oyasai'}
野菜:
{/if}
{if $key != 'niku'}
{foreach from=$abcde.$key key="key" item="item2"}
{$item2}
{/foreach}
{/if}
<br>
{/foreach}
コメントも無くて無理やりな感じですが、
一応出来そうという感じです^^;
No.1
- 回答日時:
foreachの中でカウンタをカウントアップして、所定の回数(2回)になったらbreakすればいいのでは?
$i = 0;
foreach ($abcde as $key=>$category) {
if ($i++ >= 2) { break; } // 2つ終わっていたらLoopを抜ける
switch($key) { // 添え字を使わずに「魚」などを表示となると、こういうこと?
case 'sakana':
print '魚:';
break;
case 'oyasai':
print '野菜:';
break;
case 'niku':
print '肉:';
break;
}
$j = 0;
foreach ($category as $item) {
if ($j++ != 0) { print ','; } // 初回以外はカンマを前置する
print $item;
}
print "<br />\n";
}
私の環境で試した限りでは
魚:あじ,ひらめ
野菜:ふき,トマト
という表示にはなりました。
この回答への補足
回答ありがとうございます!
Smartyではうまくループ処理が出来ず、
とりあえずPHP側でforeachを使って処理しているのですが、
PHPではなく、Smarty上でループ処理をしたかったんです。
書き方が悪くてごめんなさい。
PHPで作った配列の変数をSmartyに渡し、
Smarty上で上位二つを表示、且つ添え字が文字列なんです。
もしお時間ありましたら再度コメントお願いします!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Java Java 南京錠 2 2023/02/04 11:46
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NET で 二次元のハッシュは...
-
重複確認
-
Dictionary(連想配列?)の使い方
-
PHPで変数名にハイフンを使うに...
-
PHPからCSVをアップロード後、m...
-
foreachのなかで次のキーを参照...
-
Delphiで別unitで宣言した「TAr...
-
PHPにてクラスを配列にすること...
-
ネストが深い時のforeachはどう...
-
複数行のデータのPOST処理に関して
-
PHPでサーバー上の書き換えたht...
-
連想配列で値が空だったら、要...
-
別ファイルの構造体の値を読み...
-
am()の使い方
-
プルダウンメニューにDBの内容...
-
CSVデータの行数カウントをした...
-
しりとり 無限ループ?
-
複数ファイルで、それぞれの行...
-
Resource id #3 と表示されま...
-
配列の要素(value)に、変数を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複確認
-
foreachで上限回数指定方法また...
-
マッチング処理(1:N)
-
Excel VBAでフィルター後の対象...
-
VB.NET で 二次元のハッシュは...
-
多次元配列を、1次元の配列にす...
-
SELECT 使用時の bindValue の...
-
Smartyでインクリメント
-
PHPでこのコード自体に意味は無...
-
PHP、{}記号の意味
-
配列を比較して同じものがあっ...
-
phpでforeachの中にforeachがあ...
-
多次元配列の中で条件に合う要...
-
sqlのデーターを『あ行』『か行...
-
ラジオボタンをランダムに表示...
-
キーが倍数の時の値の存在チェ...
-
三重県南部の温泉
-
foreachで配列を、左から縦3列...
-
ジャグ配列
-
構造体の中でユーザー定義型の...
おすすめ情報