|
|
 |
| >IT技術情報>php>phpTips
|
 |
 |
 |
 |
 |
|
 |
 |
 |
配列・変数 |
|
変更しない、もしくは変更しては困るような値に関しては、定数にすると良いでしょう。
| <?
define("SITE_URL", "http://www.itboost.co.jp/");
?>
ホームページは<a href="<?=SITE_URL?>">こちら</a>
| | |
といった感じで使用します。変数のように、文字列中には書けませんのでご注意ください。
上記 Tips 提供者:松嶋@ITBoost
[2002/01/20]
|
変数や、配列の内容を空にしたいとき、unset() 関数を使用します。
メモリ効率面でのメリットはもちろんですが、
| for($i=0; $i<$row; $i++) {
$hash[pg_result($r, $i,"id")] = pg_result($r, $i, "name");
}
| | |
などというコードを書いてしまう方は、必要無くなった時点で
としておいた方が良いです。なぜなら、
| for($i=0; $i<$row; $i++) {
$hash[pg_result($r, $i,"user_id")] = pg_result($r, $i, "user_name");
}
:
:
:
for($i=0; $i<$row; $i++) {
$hash[pg_result($r, $i,"goods_id")] = pg_result($r, $i, "goods_name");
}
| | |
というようなコードを書いてしまうと、意図どおり動作しません。
ですから、unset しておいた方がよいです。
しかし、セキュリティの項でも述べますが、初期化されていない変数を
使用するのは、場合によって危険です。一番良いのは
| $hash = array();
for($i=0; $i<$row; $i++) {
$hash[pg_result($r, $i,"user_id")] = pg_result($r, $i, "user_name");
}
| | |
のように書くことです。
上記 Tips 提供者:松嶋@ITBoost
[2002/01/20]
|
変数がセットされているかどうかを知るためには isset() を使用しますが、連想配列や配列のある
添え字を持った要素が存在するかにも使用します。
| $hash["abc"] = 123;
if( isset($hash["abc"]) ) {
print "存在する";
} else {
print "存在しない";
}
| | |
上記 Tips 提供者:松嶋@ITBoost
[2002/01/20]
|
join() は、配列の要素を指定の文字列で結合した文字列を生成するための関数です。
たとえば、コンマ区切りのリストなどを生成するのに役立ちます。
| $userList = join(",", $arrUser);
if( $fieldList && $userList ) {
$sql = "SELECT name FROM user_table where id in ($userList)";
}
| | |
PostgreSQL では、in + サブクエリを使った検索が非常に遅いので、私はたまに上記のような
コードを書くことがあります。SQL がシンプルなものは、相関サブクエリやテーブルの結合で何とかなる場合も
ありますが、複雑になると、なかなか大変です。そこで、サブクエリ部分の結果だけを予め $arrUser
に格納しておき join() を使う、上記のような方法をとります。
特に $userList を何回か使いまわす場合に有効ですね。
検索用フォームあり、そのうちのいくつかに入力された条件で SELECT 文を発行したいような場合にも使えます。
| $arrSearch = array();
// フォームに入力された値を SQL の条件の形にして配列にセットしていく
if( $fCond1 ) $arrSearch[] = "category = '$fCond1'";
if( $fCond2 ) $arrSearch[] = "operation = '$fCond2'";
if( $fCond3 ) $arrSearch[] = "comment like '%$fCond3%'";
if( count($arrSearch) ) {
$cond = join(" and ", $arrSearch);
$sql = "SELECT * FROM table_a WHERE $cond";
}
| | |
上記 Tips 提供者:松嶋@ITBoost
[2002/01/20]
|
|
■ array_walk(), array_map()
|
array_walk() と array_map() は、(連想)配列全体に対してなんらかの処理をしたいときに使用します。array_walk() の方が、細やかな指定が可能です。
関数を定義し(もしくは PHP 標準の関数でもかまいません)、その関数内に、配列に対して行いたい
処理を記述します。詳細はドキュメントを御覧頂くとして、下記の例のように、関数の引数を
リファレンスとすることによって、直接配列の値を書き換えることができます。
| function operation(&$val, $key) {
$val = "'" . addSlashes($val) . "'";
}
$hash = array("field1" => "hoge", "field2" => "foo", "field3" => "bar");
array_walk($hash, "operation");
$fieldList = join("," , array_keys($hash));
$valueList = join("," , $hash);
if( $fieldList && $valueList ) {
$sql = "insert into table_a ($fieldList) values ($valueList)";
}
| | |
上記 Tips 提供者:松嶋@ITBoost
[2002/01/20]
|
開発中、配列の中身をちょっと確認したいときに便利な関数が print_r() です。
| $arr = array( "a", "b", "c");
print_r($arr);
| | |
とすれば、
| Array
(
[0] => a
[1] => b
[2] => c
)
| | |
のように、どの添え字にどの値が格納されているかが表示されます。もちろん、連想配列でも同様です。
上記 Tips 提供者:松嶋@ITBoost
[2002/01/20]
|
|
■ オブジェクト内の配列変数を可変変数で指定する方法
|
吉川様からご投稿いただきました。配列メンバ名を変数で指定するための方法です。
【$this->${配列名}[$i]】という記述で表現することができます。
ありがとうございます。
-------------------------------------------------------------------
メンバ変数として複数の配列変数が定義されていて,それを可変変数(?)で指定する際の書き方が良く分からなかったので,いくつか試して上手くいった方法を投稿します(こういう処理方法が良いかどうかは議論の余地があるような気がします).
| class Test {
var array_a;
var array_b;
function Test() {
$this->array_a = array('foo' => 'FOO');
$this->array_b = array('foo' => 'BAR');
}
function putArray($array_name,$key) {
print_r($this->${array_name}[$key]); // OK
/*
print_r($this->$array_name[$key]); // NG
*/
}
}
$test = new Test();
$test->putArray('array_a', 'foo');
| | |
要約すると,明示的に配列変数名の範囲を指定する必要がある,ということです.
上記 Tips 提供者:吉川裕之
様
[2003/04/19]
|
デバッグ時に配列またはオブジェクトの詳細を確認するのにとても役に立つ関数、[print_r()]。この関数に第二引数があることはあまり知られていないようだ。日本語マニュアルにはこのように書いている。
| void print_r ( mixed expression)
| | |
日本で出版しているどの本を読んだもこう書いている。
どこに第二引数が?と思われるかもしれない。
しかし、英語マニュアルにはこのように書いている。
| bool print_r ( mixed expression [, bool return])
| | |
print_rに戻り値があるのだ。
| $Array = array( "a","b","c" );
print_r( $Array );
| | |
とすると以下のような結果が返ってくるのはご存じの通り。
| Array([0] => a [1] => b[2] => c)
| | |
HTMLでみると全内容が一行で表示されてしまう。
しかし、以下のようにすると
| $Array = array( "a","b","c" );
echo nl2br( print_r( $Array,true ) );
| | |
| Array
(
[0] => a
[1] => b
[2] => c
)
| | |
このように整形された形でHTML表示させることができる。
dozo様、貴重な情報、ありがとうございました!
上記 Tips 提供者:dozo
様
[2003/09/30]
|
|
|
 |
|
 |
 |
|
サイト内全文検索 |
| スタックアスタリスクのサイトを検索します。検索には、Googleを利用しています。そのため、最新の情報で検索されない可能性があります。 |
|