![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
Smartyで、配列であった場合に、implodeで結合させるプラグインを作りたいのですが、思うように動作しません。
テンプレート内で、次のように記述しています。
{foreach from=$value item=i}
{$i->note|ketugou}
{/foreach}
ketugouプラグインでは次の通りです。
function smarty_modifier_ketugou($key){
if (is_array($key)) {
return implode(', ', $key);
} else {
return $key;
}
}
上記の場合、表示されるのは'Array'のみです。
プラグインで配列かどうかを確認せずに実行すると、次のエラーが出ます。
Warning: implode() [function.implode]: Bad arguments. in。。。
テンプレート上では配列であったのが、プラグインに渡すと配列ではなく、stringとなっていて要素数分実行されています。プラグインからのエラーは配列じゃないからなのですが、どう対処すればいいのでしょうか。
No.2ベストアンサー
- 回答日時:
配列全体を1つの値として作用させるには修飾子の先頭に @ 記号をつける必要があります。
{$i->note|@ketugou}
Smartyの動きが不明な時はコンパイル済みファイルを見ると多少進展します。
参考URL:http://www.smarty.net/manual/ja/language.modifie …
No.1
- 回答日時:
>function smarty_modifier_ketugou($key){
>if (is_array($key)) {
echo "通過1\n";
var_dump($key);
>return implode(', ', $key);
>} else {
echo "通過2\n";
var_dump($key);
>return $key;
>}
>}
として、まずこの関数を通過しているのか確かめてみては?
この回答への補足
早速の回答ありがとうございます。
smarty_modifier_ketugou関数に値を送ることはできています。が、配列をおくっているはずが、配列の中身が個別に送られてしまっているのです。テンプレートの時点では配列だったものが、関数には配列の要素が送られているため、その時点ではarrayではなくstring(これはgettype関数で確認しました。)です。
stringなら関数内でis_arrayとやっても反応しません。当然そのままimplodeやっても配列ではないので『Warning: implode() [function.implode]: Bad arguments. in。。。』となるようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP ワードプレスサイト PHP8.0.25でのWarningエラー 1 2023/06/12 11:44
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Visual Basic(VBA) Vba 配列の中の特定文字列の位置の調べ方 9 2022/05/23 17:46
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
String だと「 ByRef引数の型が...
-
セッション配列の取得の仕方
-
file_existsでファイル名の部分...
-
phpでつくるクイズについて
-
配列をループでたくさん宣言し...
-
連想配列のprint_rやvar_dump出...
-
$_SESSIONに二次元配列を使える...
-
foreachのなかで次のキーを参照...
-
Doctrine(ORM)での複数行Insert
-
テーブルの行と列の入れ替えは可?
-
phpのSimpleXMLでXMLの要素を参...
-
多次元配列から任意の配列を取...
-
入力フォームにおける配列デー...
-
漢字のソートについて
-
文字列連結パターンが多数ある場合
-
ファイルから指定行数分だけ読...
-
PHP 配列の添字に変数は使えない?
-
phpのfor文の中で配列を作りた...
-
$_SESSIONの中身の取り出し方
-
PHPでドメイン検索?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
$_SESSIONに二次元配列を使える...
-
file_existsでファイル名の部分...
-
配列をループでたくさん宣言し...
-
foreachのなかで次のキーを参照...
-
String だと「 ByRef引数の型が...
-
PHPのカッコ[ ]の使い方について
-
配列を回すとき、最後の要素だ...
-
配列一致(要素順番は違うが内容...
-
チェックボックス複数選択 mys...
-
漢字のソートについて
-
postgresql関数をつかったレコ...
-
ネストが深い時のforeachはどう...
-
URLのサブドメインとドメイン部...
-
OCI で、SELECT結果行数を取得...
-
【Smarty】foreach関数やsectio...
-
$_POSTを一括してサニタイズし...
-
phpで、連想配列を普通の配列に...
-
チェックボックスが複数選択で...
-
連想配列のprint_rやvar_dump出...
-
PHP 配列の添字に変数は使えない?
おすすめ情報