{if} で囲んでしまえば良いのでは?
http://www.smarty.net/manual/ja/language.function.if.php
{if is_array($foo) && count($foo) > 0)
{* foreach ループを実行します *}
{/if}
それはsmartyではなくPHPそのものに対する質問ではありませんか?
でしたら、連想配列に要素が1つもなければ、foreachは一度も回りませんよ。
{if} で囲んでしまえば良いのでは?
http://www.smarty.net/manual/ja/language.function.if.php
{if is_array($foo) && count($foo) > 0)
{* foreach ループを実行します *}
{/if}
『foreach をまわすときに、0 だったら』、『連想配列が0だったら』というのは、どういう意味でしょうか?
配列が存在しなかったらという意味でしょうか?
その場合は、以下のように記述するだけで大丈夫です。(※通常の配列か連想配列かは関係ありません。)
$smarty->assign('color_list',array());
値をセットしておいて、後で切り替えたい場合は以下のようにするといいです。
配列は通常通り記述します。
$smarty->assign('color_list',array('white'=>array('name'=>'白','code'=>'#ffffff'),'red'=>array('name'=>'赤','code'=>'#ff0000'),'blue'=>array('name'=>'青','code'=>'#0000ff'),'green'=>array('name'=>'緑','code'=>'#008000'),'yellow'=>array('name'=>'黄色','code'=>'#ffff00')));
テンプレート側に以下のように記述します。
<h3>foreachのテスト - part.1</h3> <ul> {foreach from=$color_list key=colorName item=color name=clist} {if $smarty.foreach.clist.show == $show} <li>{$colorName}: 色 - {$color.name} カラーコード - {$color.code}</li> {/if} {/foreach} </ul>
表示・非表示は変数「$show」で切り替える事が可能ですので、ページごとになど条件に応じて以下のように変数をセットします。
$smarty->assign('show', true);
あるいは
$smarty->assign('show', false);
※「1」または「0」でも可能です。
上記の例だと、非表示を指定しても見出しや(ソースに<ul>)が表示されてしまいますので、次のように「.first」プロパティや「.last」プロパティで表示を切り替えるとするとすっきりします。
{foreach from=$color_list key=colorName item=color name=clist} {if $smarty.foreach.clist.show == $show} {if $smarty.foreach.clist.first} <h3>foreachのテスト - part.2</h3> <ul> <li>{$colorName}: 色 - {$color.name} カラーコード - {$color.code}</li> {else} <li>{$colorName}: 色 - {$color.name} カラーコード - {$color.code}</li> {/if} {if $smarty.foreach.clist.last} </ul>{/if} {/if} {/foreach}
※見出しと<ul>を最初の場合だけ、ulの閉じタグを最後の場合に記述するようにしています。
このようにすると、{foreach}の中に入れても繰り返し表示されません。
http://www.smarty.net/manual/ja/language.function.foreach.php
http://www.smarty.net/manual/ja/language.function.section.php
私の場合は、下記のように{foreach}文を{if}文で囲います。ご参考まで。
{if $num > 0} {foreach from=$array item=i name="loop"} <p>{$i.xxx}</p> {/foreach} {else} <p>検索結果は、0件です</p> {/if}
http://www.smarty.net/manual/ja/language.function.if.php: if|組み込み関数|Smarty マニュアル]
smarty に foreach あります。