PHP の配列
PHP の配列についての、覚え書きというか書き散らし。


いきなり要素に突っ込んで、配列を作成
<?php
$vegetables['corn'] = 'yellow';
$vegetables['beet'] = 'red';
$vegetables['carrot'] = 'orange';

echo $vegetables['corn'] . '<br />';
echo $vegetables['beet'] . '<br />';
echo $vegetables['carrot'] . '<br />';


array 関数を利用 (key あり)
<?php
$dinner = array(0 => 'Sweet Corn and Asparagus',
1 => 'Lemon Chicken',
2 => 'Braised Bamboo Fungus',
str => 'Bare String Key');

echo $dinner[0] . '<br />';
echo $dinner[1] . '<br />';
echo $dinner[2] . '<br />';
echo $dinner['str'] . '<br />';


array 関数を利用 (key なし)
<?php
$dinners = array('Sweet Corn and Asparagus',
'Lemon Chicken',
'Braised Bamboo Fungus',);

echo $dinners[0] . '<br />';
echo $dinners[1] . '<br />';
echo $dinners[2] . '<br />';


key を指定せずに代入すると、配列の最後に追加される
<?php
$dinners[] = 'Added value';
$dinners[] = array('a', 'b', 'c');

echo $dinners[0] . '<br />';
echo $dinners[3] . '<br />';
echo $dinners[4] . '<br />'; //=> Array
echo $dinners[4][0] . '<br />'; //=> a


count() で配列の要素数を求める。未定義の変数に対する count() は 0 が返る。
<?php
echo count($dinners) . '<br />'; //=> 5
echo count($undefined_value) . '<br />'; //=> 0


空配列の作成
<?php
$empty_array = array();
echo count($empty_array) . '<br />'; // => 0


配列の繰り返し
<?php
echo '<table>';
echo '<tr><th>$key</th><th>$val</th></tr>';
foreach ($dinners as $key => $val) {
echo "<tr><td>$key</td><td>$val</td></tr>\n";
}
echo '</table>';


foreach 内で $key や $val を変えても、元の配列には影響しない。
元の配列を変える場合には $key をインデックスとして使う。
<?php
foreach ($dinners as $key => $val) {
if ($key % 2) {
$key = 'not influenced';
$val = 'not influenced';
}
else {
$dinners[$key] .= ' (modified in foreach)';
}
}

echo '<table>';
echo '<tr><th>$key</th><th>$val</th></tr>';
foreach ($dinners as $key => $val) {
echo "<tr><td>$key</td><td>$val</td></tr>\n";
}
echo '</table>';



foreach は、配列に追加された順番で要素にアクセスする。インデックス順でアクセスしたい場合は、for を使う。
<?php
$letters[0] = 'A';
$letters[1] = 'B';
$letters[3] = 'D';
$letters[2] = 'C';

foreach ($letters as $letter) {
echo $letter;
}
//=> ABDC

echo '<br />';
for ($i = 0, $len = count($letters); $i < $len; $i++) {
echo $letters[$i];
}
echo '<br />';
//=> ABCD


array_key_exists => キーの存在チェック。
<?php
if (array_key_exists(1, $letters))
echo 'key "1" exists in $letters. <br />';

if (array_key_exists(10, $letters))
echo 'key "10" exists in $letters. <br />';


in_array => 値の存在チェック。
<?php
if (in_array('A', $letters))
echo 'value "A" exists in $letters. <br />';

if (in_array('Z', $letters))
echo 'value "Z" exists in $letters. <br />';


2a問題に注意。in_array の判定に型を含める場合は、3番目の引数に TRUE を渡す。
<?php
$falses[] = false;
if (in_array('', $falses)) {
// ここを通る!!
echo 'value (EMPTY_STRING) exists in $falses. <br />';
}

if (in_array('', $falses, TRUE)) {
// ここは通らない
echo 'value (EMPTY_STRING) exists in $falses. <br />';
}


implode, 配列要素を文字列で連結
join , implode のエイリアス
unset , 配列から要素を削除する
<?php
echo implode(', ', $letters) . '<br />';
unset($letters[0]);
echo join(', ', $letters) . '<br />';


explode, 文字列をデリミタで分割
split , explode のエイリアス
<?php
$alphabet = 'A,B,C,D,E,F,G';
$alphabets = explode(',', $alphabet);
echo 'The second element of $alphabets is ' . $alphabets[1] . '<br />';

// デリミタに空文字列を指定すると、explode は FALSE を返す
$alphabets = explode('', $alphabet); //=> FALSE


文字列を文字に分解する場合は、pgrep_split (デリミタに正規表現を指定できる) を使う
参考: PHP: preg_split - Manual
<?php
$str = 'string';
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);

[PR]
by fkmn | 2010-04-12 23:55 | IT
<< PHP の関数 PHP の文字列比較 >>


とあるWebアプリケーションエンジニアの日記
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
カテゴリ
以前の記事
ブログパーツ
リンク
検索
タグ
最新のトラックバック
プログラミングが「出来る..
from とりあえず9JP?
Genographic ..
from ナンジャモンジャ
ジュセリーノ
from ありの出来事
くちこみブログ集(ライフ..
from くちこみブログ集(ライフ)(..
以降、丁寧語で行こう!
from エッセイ的な何か
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧

fkmnの最近読んだ本 フィードメーター - フッ君の日常 あわせて読みたい AX