株式会社ラクス  ITエンジニア総合支援サイト スタックアスタリスク フルマネージド専用サーバー エクスユニット
ITエンジニアとして 知る 学ぶ
 
Java
.NET
PHP
プログラミング一般
DataBase
システム/サーバ構築
システム/サーバ運用
技術系一般知識
 
 
>IT技術情報>php>phpTips
php
目次
■ 目次
投稿する!
■ 投稿フォーム
検索
■
PHP Tips
■ 配列・変数
■ PEAR
■ 真と偽
■ ループ、分岐
■ require, include
■ 文字列処理
■ 数字処理
■ 日付・時刻処理
■ ファイル処理
■ 外部プログラム実行
■ バイナリデータ
■ 関数
■ オブジェクト指向
■ HTML
■ DB(PostgreSQL)
■ セッション
■ マルチバイト
■ PDF
■ HTTP
■ メール
■ SSL
■ 時間のかかる処理
■ リロード対策
■ APC他
■ サイト構成方法論
■ パスワード認証
■ ID 発行の方法
■ 効率的な処理
■ セキュリティ
■ 開発環境、デバッグ
■ ネーミング
■ GD関連
戻る
■ メインに戻る
配列・変数


■ 定数

変更しない、もしくは変更しては困るような値に関しては、定数にすると良いでしょう。
<?
define("SITE_URL", "http://www.itboost.co.jp/");
?>
ホームページは<a href="<?=SITE_URL?>">こちら</a>
といった感じで使用します。変数のように、文字列中には書けませんのでご注意ください。

上記 Tips 提供者:松嶋@ITBoost [2002/01/20]

■ unset()の使い道

変数や、配列の内容を空にしたいとき、unset() 関数を使用します。 メモリ効率面でのメリットはもちろんですが、
for($i=0; $i<$row; $i++) {
  $hash[pg_result($r, $i,"id")] = pg_result($r, $i, "name");
}
などというコードを書いてしまう方は、必要無くなった時点で
unset($hash)
としておいた方が良いです。なぜなら、
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()の使い道

変数がセットされているかどうかを知るためには isset() を使用しますが、連想配列や配列のある 添え字を持った要素が存在するかにも使用します。
$hash["abc"] = 123;
if( isset($hash["abc"]) ) {
  print "存在する";
} else {
  print "存在しない";
}


上記 Tips 提供者:松嶋@ITBoost [2002/01/20]

■ join()の使い道

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()の使い道

開発中、配列の中身をちょっと確認したいときに便利な関数が 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の第二引数

デバッグ時に配列またはオブジェクトの詳細を確認するのにとても役に立つ関数、[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]

▼Java や Linux を体系的に学びましょう!▼
Stack*のラクスが、
新学習方式のカリキュラムを開発しました!
14700円から(*1)、Java や Linux を体系的に学べます!!
(*1 テキスト代のみの税込料金です)




サイト内全文検索
スタックアスタリスクのサイトを検索します。検索には、Googleを利用しています。そのため、最新の情報で検索されない可能性があります。


簡単レンタルメールフォーム
300メガ1000円〜 XBitのレンタルサーバー
500メガ1995円〜 電話サポート/PostgreSQL/専用SSLなどにも対応!お客様のニーズを網羅したレンタルサーバ
ホームページ制作のアシストウェブ
STACK* 執筆の講師陣から習得する!! ITエンジニアスクール アイティブースト
統合メールサポートシステム 〜MailDealer(メールディーラー)〜
システム開発,IT教育 〜株式会社アイティーブースト(ITBoost)〜
簡単 営業支援/顧客管理ツール Easy Sales
  利用規約 お問い合わせ・ご意見 スタックアスタリスクについて 運営会社について 
  レンタルサーバー ホスティング 専用サーバー メールフォーム ショッピングカート メール共有 ITエンジニア派遣 Linux講座 Java講座 メール配信 レンタルサーバー Webデータベース 検索サービス
CopyrightcRAKUS Co.,Ltd. All Rights Reserved.  メール管理・共有 顧客管理(CRM)もできるメール対応サポートシステム JAVA LINUX CISCO 技術者派遣 育成事業 株式会社ラクス