Smartyへの2次元配列引渡しについて

このQ&Aのポイント
  • Smartyを使用してPHPで2次元配列を取得し表示する際に、一部の環境では中身がNULLになってしまう現象が発生しています。
  • 対処法を探してみましたが、解決できないため、質問します。
  • 環境によって処理される内容も変わってくるのでしょうか。
回答を見る
  • ベストアンサー

Smartyへの2次元配列引渡しについて

PHP+Smartyで現在開発をしておりますが MySQLからデータを取得し、それをSmartyに引き渡すと中身がNULLになってしまう現象が発生しています。 これがすべてにおいて発生しているのであれば納得いくのですが ある環境では発生して、またある環境では問題なく処理できるのです。 対処法を探してみましたが、どうしても対処できないので ご教授いただけたらと思います。 サーバから抽出した内容をPHP側でvar_dumpしたものです。 array(3) { [0]=> array(1) { ["ITEM_ID"]=> string(1) "1" } [1]=> array(1) { ["ITEM_ID"]=> string(1) "2" } [2]=> array(1) { ["ITEM_ID"]=> string(1) "3" } } これを $smarty -> assign("LIST", $ROW); でsmartyに出力しました。 Smarty側では以下の内容を実行しました。 {{$LIST|@var_dump}} 結果 array(3) { [0]=> NULL [1]=> NULL [2]=> NULL } でした。 問題ない環境だと array(3) { [0]=> array(1) { ["ITEM_ID"]=> string(1) "1" } [1]=> array(1) { ["ITEM_ID"]=> string(1) "2" } [2]=> array(1) { ["ITEM_ID"]=> string(1) "3" } } ときちんと値を引き継いでいます。 下記は上記の内容を実行した環境です。 動作しなかった環境 ローカル(XAMPP使用) PHP Version 5.2.9 Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9 サーバ: localhost via TCP/IP サーバのバージョン: 5.1.33-community MySQL クライアントのバージョン: 5.0.51a 動作した環境 レンタルサーバー PHP Version 5.2.9 Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8i DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 サーバ: Localhost via UNIX socket サーバのバージョン: 5.0.75-community-log MySQL クライアントのバージョン: 5.0.75 サーバー環境によって処理される内容もかわってくるのでしょうか・・・。

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
noname#87667
noname#87667
回答No.1

http://okwave.jp/qa5053445.html 上記質問と何か違うのでしょうか?あまり質問を乱立させないほうがいいと思います。

関連するQ&A

  • PHPとSmartyの関連について

    PHPとSmartyの関連について PHPからSmartyに出力しているのですが中身がNULLになります。 データベースアクセスにはPDOを使用しています。 PHPソース DBアクセス $SQL = "select ITEM_ID from ITEM_TBL limit 0, 3"; $STMT = $GLOBALS["PDO"] -> query($SQL); $ROW = $STMT -> fetchAll(PDO::FETCH_ASSOC); Smartyでアサイン $smarty -> assign("ITEM_LIST", $ROW); Smartyソース <table> {{foreach from=$ITEM_LIST item=LIST}} <tr> <td>{{$LIST.ITEM_ID}}</td> </tr> {{/foreach}} </table> のような感じでページ出力したいのですが、表示をすると中身がNULLでした。 PHP側で var_dump($ROW); を行うと array(3) { [0]=> array(1) { ["ITEM_ID"]=> string(1) "1" } [1]=> array(1) { ["ITEM_ID"]=> string(1) "2" } [2]=> array(1) { ["ITEM_ID"]=> string(1) "3" } } 中身が配列で格納されています。 smarty側で {$ITEM_LIST|@var_dump} を行うと array(3) { [0]=> NULL [1]=> NULL [2]=> NULL } でした。 いろいろとやってみたのですが、わからなくなってしまったので どなたかご教授いただけませんでしょうか。よろしくお願いします。

    • 締切済み
    • PHP
  • Smarty 三次元配列を使いたい

    最近Smartyを使い始めた者です。 以下のような多次元配列を、$smarty->assign('data', $data); します。 $data = array( [0] => array( [id] => 23 [comment] => 'aaa' [name] = array( [0] => 'xxx' [1] => 'yyy' )) [1] => array( [id] => 24 [comment] => 'bbb' [name] = array( [0] => 'zzz' )) [2] => array( [id] => 25 [comment] => 'ccc' [name] = array( [0] => 'ttt' [1] => 'uuu' )) ) そして、以下のようなテーブルを表示させたいのです。 |-------------------| | 23  | aaaa | xxxx | |    |     |------| |    |     | yyyy | |-------------------| | 24  | bbbb | zzzz | |-------------------| | 25  | cccc | tttt | |    |     |------| |    |     | uuuu | |-------------------| <td>タグのrowspan属性を使おうと思っています。 {foreach}をつかって、以下のようなものを書きましたが、駄目でした。 {foreach from=$data item=value01 name=kiji} <tr> <td rowspan="{$value01.numgoods}">{$value01.id}</td> <td rowspan="{$value01.numgoods}">{$value01.comment}</td> {foreach from=$value01 item=value02 name=goods} {if $smarty.foreach.goods.first} <td>{$value02.name.0]</td></tr> {else} <tr> <td>{$value.name.1}</td> </tr> {/if} {/foreach} {/foreach} エラー表示は、 syntax error: unrecognized tag: $value02.name.0 です 本当は、$value02.name の.0を三次元での要素数分だけ自動でループしてほしいのですが、その書き方がわかりません。 ネットをあさっても、これと言うサイトを見つけれません。 そもそも、三次元目の要素を取得するsmartyの方法がわかりません。 どなたかご教授の程、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • smartyのforeachの使い方?

    smartyについて教えてください。 mysqlのデータを繰り返し表示させたいのですが Warning: htmlspecialchars() expects parameter 1 to be string, array given in パス modifier.escape.php on line 26 とエラーが出てしまい動作しません。 foreachの使い方がおかしいのかと思いマニュアルをみてみたのですが わかりませんでした。 どうすれば繰り返し表示できるようになるでしょうか? ---php--- $i = 0; $list = array(); while ($col = mysql_fetch_array($res, MYSQL_ASSOC)) { $list[$i]['id'] = $col[id]; $list[$i]['title'] = $col[title]; $list[$i]['main'] = $col[main]; $i++; } $smarty->assign('list', $list); ---tpl--- {foreach item=list from=$list} <tr> <td>{$list.id}</td> <td>{$list.title}</td> <td>{$list.main}</td> <td><a href="hoge.php?id={$list.id}">a</a></td> <td><a href="hoges.php?id={$list.id}">a</a></td> </tr> {/foreach}

    • ベストアンサー
    • PHP
  • 2次元配列の作り方

    データ型 name varchar(30), item1 char(8), item2 int(6) として下記のテーブルがあります。 | name | item1 | item2 | | taro | abcd | 28 | | taro | efghk | 33| | taro | lmnp | 05 | これから2次元配列形式でデータを取得したいのですが、うまく並んでくれません。 まず、 (前略) $query ="SELECT item1,item2 from *** where name='taro'"; $result = mysql_query($query,$conn_id) or die($query.'failed('.mysql_error().')'); $data[][] = mysql_fetch_assoc($result);  とすると(当然ながら)、 Array ( [0] => Array ( [0] => Array ( [item1] => abcd [item2] =>28 ) ) ) と最初のレコードだけが取得されます。 while($data[][] = mysql_fetch_assoc($result)){ print_r($data); echo "<br/>\n"; } とすると、 Array ( [0] => Array ( [0] => Array ( [item1] =>abcd [item2] => 28 ) ) ) Array ( [0] => Array ( [0] => Array ( [item1] => abcd [item2] => 28 ) ) [1] => Array ( [0] => Array ( [item1] => efghk [item2] => 33 ) ) ) Array ( [0] => Array ( [0] => Array ( [item1] => abcd [item2] => 28 ) )      [1] => Array ( [0] => Array ( [item1] => efghk [item2] => 33 ) )      [2] => Array ( [0] => Array ( [item1] => lmnp [item2] => 05 ) ) ) となってしまうのですが、 Array ( [0] => Array ( [0] => Array ( [item1] => abcd [item2] => 28 ) )      [1] => Array ( [0] => Array ( [item1] => efghk [item2] => 33 ) )      [2] => Array ( [0] => Array ( [item1] => lmnp [item2] => 05 ) ) ) だけを取得させるにはどのように書けば良いでしょうか?

    • ベストアンサー
    • PHP
  • smartyのforeachの使い方

    仮に$strが以下のような配列を持っている場合smartyのtpl側で 出力させたいのですがうまくいきません。 Array ( [0] => Array ( [id] => 1 [name] => 名前 [sub_id] => Array ( [0] => 12 [1] => 13 ) [sub_name] => Array ( [0] => あああ [1] => いいい ) [sub_cnt] => Array ( [0] => 5 [1] => 5 ) ) [1] => Array ( [id] => 1 [name] => 名前 ) ) sub_***は配列が存在するものとしないものがあります。 そしてtpl側は {foreach item=items from=$str} <ul id="side{$items.id}"> {foreach item=item from=$items} <li><a href="index.php?id={$item.sub_id}">{$item.sub_name} ({$item.sub_cnt})</a></li> {/foreach} </ul> {/foreach} とforeachを重ねてみたのですがsub_***の値が表示されない 状態です。 複雑な配列なのですがこの場合どうすればうまく表示させれるの でしょうか?

    • ベストアンサー
    • PHP
  • Smartyで添え字が全て文字列の多次元配列

    Smartyで添え字が全て文字列の多次元配列 いつもお世話になっております。 Smartyで添え字が全て文字列の多次元配列を表示したいと考えています。 ■■元データ■■ $menu_list = array( '魚' => array( 'サバ' => 'サバカレー', 'タイ' => 'タイカレー' ), '肉' => array( '豚肉' => 'ポークカレー', '牛肉' => 'ビーフカレー' ), '野菜' => array( 'キャベツ' => 'キャベツカレー', 'きゅうり' => 'きゅうりカレー' ) ); ■■期待する出力■■ <ul> <li>魚 <li>サバ/サバカレー<li> <li>サバ/サバカレー<li> </li> </ul> <ul> <li>肉 <li>豚肉/ポークカレー<li> <li>牛肉/ビーフカレー<li> </li> </ul> <ul> <li>野菜 <li>キャベツ/キャベツカレー<li> <li>きゅうり/きゅうりカレー<li> </li> </ul> 散々悩んだ挙句、Smarty側では当初次のようにしたところ、とりあえずはうまくいっています。 {foreach from=$menu_list key="key" item="item" name="loopName"} {if $smarty.foreach.loopName.iteration <= 3} {if $smarty.foreach.loopName.iteration == 1} <ul> <li>魚 {elseif $smarty.foreach.loopName.iteration == 2} <ul> <li>肉 {elseif $smarty.foreach.loopName.iteration == 3} <ul> <li>野菜 {/if} {foreach from=$menu_list.$key key="key" item="val"} <li>{$key}/{$val}</li> {/foreach} {/if} </li> </ul> {/foreach} 元データの内容は頻繁に変わるため、Smartyのテンプレートに添え字を直で書くのは 避けたいのですが、どうしたら良いのでしょうか。 できるだけPHP側で加工して、テンプレートはループで回すだけにしたいと考えています。 すみませんが、お知恵を貸していただけないでしょうか。 ・・・カレー食べたい。

    • ベストアンサー
    • PHP
  • SQL及びSMARTYの利用

    お世話になります SMARTYとmySQLを利用してサイトを構築しています。 下記の様なSQLデータからデータを一行ずつ生成したいです。 名前だけは取り出すことが出来たのですが、年齢の取り出し方が判りません。 アドバイスをお願い致します SQL------------------------------------------------------------------- ---------------------------- | id | namae | age | ---------------------------- | 1 | 田中 | 22 | ---------------------------- | 2 | 佐藤 | 29 | ---------------------------- PHP------------------------------------------------------------------- //空の配列を用意 $name = array(); //SMARTY用の代入変数を生成 while($data = $res -> fetchRow()){ array_push($name,mb_convert_encoding($data['namae'],"SJIS","UTF-8")); } $smarty->assign("namae",$name); HTML------------------------------------------------------------------ {foreach from=$namae item=namae} {$namae}{$age}<br> {/foreach} ----------------------------------------------------------------------

    • ベストアンサー
    • PHP
  • JSON多次元オブジェクト(?)を配列へ変換したい

    ・下記のようなJSON多次元オブジェクト(?)を配列へ変換したいのですが、どうすれば良いでしょうか? ・json_decode試したけどうまくいきませんでした ・出来れば、data以下だけを配列で取得したいです array(1) { [0]=> string(1284) {"version":1,"req_id":null,"error":null,"data":[ {"name":"Sad","j_title":"A","id":"23","thumb":"hoge1","date":"2009","title":"Ch","url":"hoge2"}, {"name":"Wil","j_title":"r","id":"30","thumb":"hoge3","date":"2013","title":"Po","url":"hoge8"} ]} [1]=> string(1282) {"version":1,"……

    • ベストアンサー
    • PHP
  • Smartyのテンプレート内で、連想配列をassignする方法はあるのでしょうか?

    Smartyのテンプレート内で、連想配列をassignする方法はあるのでしょうか? もし、なんらかご存知の方いらっしゃいましたら教えて下さい。 #最悪{php}を使うとかでも構いませんので。。 ■現在 .php ---- $ary = array('id' => 1, 'name' => 'buta'); $sm = new Smarty(); $sm->assign('ary', $ary); ---- .tpl ---- ID={ $ary.id }<br> NAME={ $ary.name }<br> ---- ■希望 .tpl ---- { assign var='ary' value=array('id' => 1, 'name' => 'buta') } ⇒ エラー ID={ $ary.id }<br> NAME={ $ary.name }<br> ---- よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHP+smartyで困っております。

    今までASPで開発をおこなっておりましたが、PHPを勉強中のPHP初心者です。 さて、smartyでの表示ですがどうしてもうまくいきません。 $smarty->assign("info",manage::getinfo(18,$a_db)); $smarty->display("comp_regist2.tpl"); で、smartyを利用したいのですが、値が表示されません。 {debug} にて下記値がわたされているのは確認しております。 Array (1) 0 => manage Object (2) _id => 18 _company_name => AAA店 tplファイルに、下記内容を記入してみましたが、表示されません。 {$info._id|escape}<hr> {$info._company_name|escape}<hr> {$_id}<hr> {$_company_name}<hr> {debug} {$info._id} {$info._company_name} 丸二日、、、こんなところではまっております。 お教えいただけませんでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう