Search A.I.
Menu
ホーム

メールマガジン ホームページプログラミングテク

Windowsテク
Javaアプレット サンプル
Java Q & A
JavaScript Q & A
Perl Q & A
Perl レッスン
PHP レッスン
PHPテク
MS-DOS コマンド集
UNIX コマンド集
SQL コマンド集
SEの基礎講座
WEBシステム開発受注します
]無料フォームメール送信サービス
リンク集
PHP レッスン

1. PHP の基礎
2. PHPの文法、条件式
3. PHPの文法、条件式 - 続き
4. 配列について
5. ハッシュ配列について
6. 関数について
7. 関数について - 続き
8. 文字列操作関数
9. 配列操作関数
10. ファイル操作
11. ファイル操作 - 続き
12. パラメータの受け渡し
13. クッキーとセッション
14. 総合練習
15. メール送信
16. ファイルアップロード
17. クラスについて
18. クラスについて - 続き
19. MySQL
20. MySQL - 続き(1)
21. MySQL - 続き(2)
22. PostgreSQL
23. 総合練習
24. 総合練習解答



9. 配列操作関数

今日は、配列操作関数について、ご説明いたします。

■配列操作の関数
配列を操作するための、便利な関数をご紹介します。

join($str1, $ary) 配列$aryを、$str1区切りの文字列に連結します。
split($pattern, $str1) 文字列$str1を$patternで区切った配列にします。
sort($ary) 配列$aryをソートします。
array_reverse($ary) 配列$aryの順番を逆に並べ替えます。
array_push($ary, $val) 配列$aryの末尾に$valを加えます。
array_pop($ary) 配列$aryの最後の要素を取り出し、その要素を削除します。
array_unshift($ary, $val) 配列$aryの先頭に$valを加えます。
array_shift($ary) 配列$aryの先頭の要素を取り出し、その要素を削除して詰めます。

配列の操作関数は他にもありますが、よく使用されるのは、上記のものが多いです。

以下にサンプルを記述します。

-----------------------------------------------------------------
$path = '/usr/local/bin/psql';

// "/"の間の文字列を要素とする配列を作成
$ary = split("/", $path); // $ary = ('', 'usr', 'local', 'bin', 'psql')

// 配列をABC順にソート
sort($ary); // $ary = ('', 'bin', 'local', 'psql', 'usr')

// 配列の順番を逆に並べ替え
$ary = array_reverse($ary); // $ary = ('usr', 'psql', 'local', 'bin', '')

// 配列の最後の要素を削除
array_pop($ary); // $ary = ('usr', 'psql', 'local', 'bin')

// 配列の末尾に追加
array_push($ary, 'path'); // $ary = ('usr', 'psql', 'local', 'bin', 'path')

// 配列の先頭に追加
array_unshift($ary, 'test'); // $ary = ('test', 'usr', 'psql', 'local', 'bin', 'path')

// 配列の先頭を削除
array_shift($ary); // $ary = ('usr', 'psql', 'local', 'bin', 'path')

// 配列を","で区切った文字列に変換
$str = join(",", $ary); // $str = "usr,psql,local,bin,path"
-----------------------------------------------------------------

split()関数は、文字列を指定した区切り文字で分解し、配列を作成します。
区切り文字は、第1引数で指定しますが、最初の文字が"/"ですので、配列の
最初の要素は、空文字となります。

sort()関数は、順番を並び替えます。基本的には文字コード順になるので、
日本語でもひらがな→カタカナ→漢字の順にうまくいくはずです。逆順に
ソートしたい場合は、

rsort($ary);

とします。sort()関数は戻り値はなく、引数が直接ソートされますので、注意して
ください。

array_reverse()関数は、現在の配列を逆に並び替えます。サンプルのように、
空文字がある場合は、最後に移動されます。

array_pop()関数は、配列の最後の要素を取り出し、削除します。サンプルの場合は
空文字を取り出していますが、array_pop()の戻り値で最後の要素が返ってきています。

array_push()関数は、array_pop()の逆で、配列の末尾に要素を追加します。要素数は
1 つ増えます。

array_unshift()関数は、配列の先頭に要素を追加します。もともとの先頭の要素は
削除されず、要素数が 1 つ増える形になります。

array_shift()関数は、array_unshift()の逆で、配列の先頭の要素を削除して、
詰めます。

join()関数は、配列を好きな区切り文字で、文字列に連結させることができます。
サンプルの場合は、","で 1 つの文字列につなげています。

■ハッシュ配列操作関数
ハッシュ配列を操作するための関数もいくつかあります。

array_keys($hash) ハッシュ配列$hashのキー値を配列で返します。
array_values($hash) ハッシュ配列$hashの値を配列で返します。
each($hash) ハッシュ配列$hashのキー値、値を返します。

使用方法のサンプルを記述します。

-----------------------------------------------------------------
$hash = array('name'=>'Jun Takayama', 'mail'=>'info@searchai.jp');

$key = array_keys($hash);
print_r($key);

$value = array_values($hash);
print_r($value);

list($a, $b) = each($hash);
print $a;
print $b;
-----------------------------------------------------------------

array_keys()は、キー値の配列が返ってきますので、上のサンプルだと'name'、
'mail'の入った配列が出力されます。

array_values()は、ハッシュ値の配列ですので、'Jun Takayama'、
'info@searchai.jp'の入った配列が出力されます。

each()は、キー値とハッシュ値を 1 組返す関数ですので、'mail'、
'info@searchai.jp'の組が返されると思います。list()は、配列で受け取った
ものを、list()内の引数の変数に格納するためのものです。通常、each()を
使用する場合は、ループで全ての値を取り出す時に使用します。

-----------------------------------------------------------------
$hash = array('name'=>'Jun Takayama', 'mail'=>'info@searchai.jp');

while ( list($a, $b) = each($hash) ) {
print $a;
print $b;
}
-----------------------------------------------------------------

 

★今日のまとめサンプルプログラム
-----------------------------------------------------------------
<HTML>
<BODY>
<?

// 曜日のカンマ区切りの文字列
$week = "sun,mon,tue,wed,thu,fri,sat";

// 曜日を配列に格納
$week = split(",", $week);

// 曜日を文字列に連結
print join(' | ', $week) . "<br>";

$ary = array(50,28,72,17,32,81,7,66,97);

// 配列の最後に追加
array_push($ary,49);

// 配列をソートする
sort($ary);

// 配列の最後を取り出して表示
print array_pop($ary) . "<br>";

// 配列の最初を取り出して表示
print array_shift($ary) . "<br>";

// 配列の最初に挿入
array_unshift($ary, 8);

// 文字列に連結して表示
print join(" ", $ary) . "<br>";

// ハッシュ配列の作成
$data['name'] = "Jun Takayama";
$data['mail'] = "searchai@zw.main.jp";

// keysを使用して値を取得
$keys = array_keys($data);
foreach ($keys as $key) {
print $key . "の値は" . $data[$key] . "<br>";
}

// eachを使用して値を取得
while ( list($key, $value) = each($data) ) {
print $key . "の値は" . $value . "<br>";
}

?>
</BODY>
</HTML>
-----------------------------------------------------------------

■解説
array_pop()やarray_shift()は、配列の最後と最初を削除するだけでなく、
戻り値として返ってきます。配列から取り出すというイメージです。

ハッシュ配列をループで取り出すという処理は、あまり実際のプログラムで必要な
ことはないので、頭の片隅に入れておく程度で結構です。

 

★課題
1. 以下の処理を行うプログラムを作成してください。

(1) 'sun;mon;tue;wed;thu;fri;sat'という文字列の";"を除いて配列に格納し、
さらに" : "で区切った文字列に連結し、出力する
(2) 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'という文字列の','を
除いて配列に格納し、アルファベットの逆順にソートする
(3) ('sun','mon','tue','wed','thu','fri','sat')という配列で、最初の'sun'を
一番最後に移動する処理
(4) ('name'=>'Ichiro Suzuki','mail'=>'mail@email.co.jp')というハッシュ配列の
ハッシュ値のみを取り出して出力する

 

★前回の課題の解答
1. 以下の処理を行うプログラムを作成してください。

(1) 'test@homepage.co.jp'の文字列から、"@"と最初の"."の間の文字列を出力する
(2) 現在日時を取得し、'2004年01月01日 00時00分00秒'の形式で出力する
(3) 'abc123'という文字列が、半角アルファベットのみかどうかを判定する
(4) 'test'、'TEST'、'Test'のどの文字がきても、'Test'に置換して出力する
(strtolowerを使用)
(5) ある文字列の中に、'〜is〜sample〜'という形式に一致しているかを判定する
("〜"は任意の文字列とします)

→下のサンプルを参照してください。

-----------------------------------------------------------------
<HTML>
<BODY>
<?

// (1) 'test@homepage.co.jp'の文字列から、"@"と最初の"."の間の文字列を出力する

$mail= 'test@homepage.co.jp';
print substr($mail, strpos($mail, '@')+1, strpos($mail, '.')-strpos($mail, '@')-1) . "<br>";

// (2) 現在日時を取得し、'2004年01月01日 00時00分00秒'の形式で出力する

print date("Y年 m月 d日 H時 i分 s秒") . "<br>";

// (3) 'abc123'という文字列が、半角アルファベットのみかどうかを判定する

$str = "abc123";
if (!ereg("^[a-zA-Z]+$", $str)) {
print "半角アルファベット以外あり<br>";
}

// (4) 'test'、'TEST'、'Test'のどの文字がきても、'Test'に置換して出力する

$str = 'TEST';
$str = str_replace('test', 'Test', strtolower($str));
print $str . "<br>";

// (5) ある文字列の中に、'〜is〜sample〜'という形式に一致しているかを判定する

$str = "This is a sample.";
if (ereg(".+is.+sample.+", $str)) {
print "マッチ";
}

?>
</BODY>
</HTML>
-----------------------------------------------------------------

■解説
(1)は少し複雑ですが、substrの引数は、1:元の文字列、2:抜き出し開始の位置、
3:抜き出す文字数ですので、3 つ目の引数は、'.'の位置から'@'の位置を引くと、
長さが計算できます。しかし、これだけでは'.'も含まれてしまいますので、-1
します。

(5)は、.+ を指定することで任意の文字で検索します。文字がなくてもマッチ
させたい場合は、.* を使用します。




前の章へ 次の章へ


このエントリーをはてなブックマークに追加


OfficeLance

お問い合わせはこちらから