maki-o memo

制作に関する私的なメモです

smartyでの多次元配列の扱い

検証モデル:

$rec = array (
array ("id" => "01" , "name" => "久保田" , "list" => "php,mysql,css") ,
array ("id" => "02", "name" => "山本" , "list" => "mt,css,design") ,
array ("id" => "03" , "name" => "立松" , "list" => "mt,css,dance")
);

というデータがあったとします。 まず、これの、listの値をコンマで分けて配列に格納したい場合、

foreach ( $rec as $key => $value ) {
$rec[ $key ][ "list" ] = explode ("," , $value["list" ]);
}

という式で、listの中にさらに配列ができます。 ポイントは、$valueで配列を指定しているところです。 この場合、$valueには、arrayという値が入っているはずです。

このデータをテンプレートで出力する場合、まず、

$smarty->assign ( "rec" , $rec );

でアサインし、 テンプレート側では、

{foreach item=value key=key from=$rec name=rec}
<p> {$value.id} </p>
<p> {$value.name} </p>
{foreach item=seplist from=$value.list name=seplist}
{if $smarty.foreach.seplist.first}
<ul>
    <li> {$seplist} </li>
{/if}
    <li> {$seplist} </li>
{if $smarty.foreach.seplist.last}
    <li>  {$seplist} </li> 
</ul>
{/if}
{/foreach}
{/foreach}

と、記述します。 id、nameは、$valueに続けて.でキーをつなげてやれば出力されますが、 listには更に配列が格納されているので、foreachを入れ子にし、 出力を定義させてやる必要があります。


PEARでのMySQLからのレコード取得方法

通常: $sql = "select * from テーブル名"; $res = $db->query ($sql); while ($row = $res->fetchRow (DB_FETCHMODE_ASSOC )) { //処理 }

getAll:$resには、レコードの数だけの二次元配列が作成される。 $res = $db->getAll ($sql , DB_FETCHMODE_ASSOC);

getRow:$resには、SQLの結果から最初の一行を返す。 $res = $db->getRow ($sql , DB_FETCHMODE_ASSOC);

getOne:最初に取得するレコードの先頭のフィールドの値だけを返す。 $res = $db->getOne ($sql);

getCol:第2引数に指定した番号のフィールドの値だけを配列で返す。 $res = $db->getCol ($sql , 1);


SELECT:テーブルからレコードを抽出

select * from テーブル名 order by フィールド名 desc; →フィールド名で降順出力。

select count(*) as 任意フィールド名 from テーブル名 where フィールド名 like '%条件%'; →あるフィールドの条件を含むレコードの数をカウント。


UPDATE:レコードの値を更新する

update テーブル名 set フィールド名 = 新しい値;
  →全レコードの「フィールド名」のフィールドを「新しい値」にする。

update テーブル名 set フィールド名 = 新しい値 where 条件;
  →条件で指定したレコードの値を更新。

update テーブル名 set フィールド名 = 新しい値 , フィールド名 = 新しい値;
  ※複数のフィールドを更新したい場合はコンマで区切る。

update テーブル名 set フィールド名 = 新しい値 where 条件フィールド名 in ('フィールド名1','フィールド名2','フィールド名3');
  ※複数のレコードの同じフィールドへ、同じ値を入力する。


DELETE:レコードを削除する

delete from テーブル名;
  →テーブルのすべてのレコードを削除。

delete from テーブル名 where 条件;
  →条件で指定したレコードを削除。


プロフィール

フロントエンドエンジニア

Tomokazu Makita

名古屋でフリーランスでWeb制作してます。 フロントエンドのことを主にやってます。
a-blog cmsを使用したサイト制作が得意です。
お仕事のご相談随時受付中。

雪山大すき。冬は雪山の合間に仕事します。
財布はいつも吹雪です。

エントリーリスト

タグ