foreachループ内での配列要素の変更

  • 投稿日:
  • by
  • カテゴリ:
  • ハッシュタグ:

MVCへの転換中の「プランB」ですが、また飽きてきました。 だって面倒くさいんだもん。

MとCの分離についてですが、生真面目にやろうとすると本当に大変なので、結局は汎用的にDBからテーブルのデータを配列として取り出す関数を使う程度に留めた方がいいように思います。
んで、その配列ごとV(Smartyのテンプレート)に渡して、foreachループで表にすると。

その場合に問題になるのは、取り出した配列の値をキーにしてまたDBから取り出したデータを表に混在させる場合です。
C(PHPファイル)側でループさせてDBにアクセスはできますが、元の配列と別の配列になってしまいます。
テンプレートに渡す配列はなるべく少なくしたいですし、Smarty側でforeachループを回す際にちょっと面倒です。

元の配列に追加できればいいのですが、どうやればいいのか悩んでいました。
ちゃんとマニュアルに書いてあったんですが。

PHP: 配列 - Manual

PHP 5 以降では、配列を参照渡しすることでその値を直接変更できるようになりました。 それ以前のバージョンでは、以下のような回避策が必要です。
 
例3 ループ内での要素の変更
<?php
// PHP 5
foreach ($colors as &$color) {
    $color = strtoupper($color);
}
unset($color); /* これ以降の $color への書き込みが
配列の要素を書き換えてしまわないことを保証する */
 
// 旧バージョンでの回避策
foreach ($colors as $key => $color) {
    $colors[$key] = strtoupper($color);
}
 
print_r($colors);
?>

よく「foreach ($rows as $row) 」なんてやりますが、これを「foreach ($rows as &$row) 」とすれば、「$row['hoge'] = 'hogehoge';」なんて感じで元の配列($rows)に追加できる訳ですね。