📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の13版が非表示) | |||
| 116行目: | 116行目: | ||
PHPでは、配列のサイズを変更する方法は複数存在する。<br> | PHPでは、配列のサイズを変更する方法は複数存在する。<br> | ||
<br> | <br> | ||
==== 要素の追加 ==== | |||
* 配列代入による方法<br>完全に新しい配列に置き換える場合は、配列代入を行う。 | * 配列代入による方法<br>完全に新しい配列に置き換える場合は、配列代入を行う。 | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
| 139行目: | 140行目: | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
$result = [72, 52]; | $result = [72, 52]; | ||
array_push($result, 96, 20); // | array_push($result, 96, 20); // 最後尾に96と20を追加 | ||
// 追加後は、$result = [72, 52, 96, 20] となる | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
| 149行目: | 151行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
* | * array_unshift関数を使用する方法<br>これは、配列の先頭に要素 (要素群) を追加するものである。 | ||
<syntaxhighlight lang="php"> | |||
$result = [72, 52]; | |||
array_unshift($result, 96, 20); // 先頭に96と20を追加 | |||
// 追加後は、$result = [96, 20, 72, 52] となる </syntaxhighlight> | |||
<br> | |||
* array_splice関数を使用する方法<br>これは、任意の位置に要素 (要素群) を追加するものである。 | |||
<syntaxhighlight lang="php"> | |||
$result = [72, 52]; | |||
array_splice($result, 2, 0, [96, 20]); // 2番目の要素の位置に96と20を追加 | |||
// 追加後は、$result = [72, 52, 96, 20] となる | |||
</syntaxhighlight> | |||
<br> | |||
==== 要素の削除 ==== | |||
* array_pop関数で要素を削除する方法<br>これは、末尾の要素を削除する。 | |||
<syntaxhighlight lang="php"> | |||
$result = [72, 52, 96, 20]; | |||
array_pop($result); // 最後尾の要素である20を削除 | |||
</syntaxhighlight> | |||
<br> | |||
* array_shift関数で要素を削除する方法<br>これは、先頭の要素を削除する。 | |||
<syntaxhighlight lang="php"> | |||
$result = [72, 52, 96, 20]; | |||
array_shift($result); // 先頭の要素である72を削除 | |||
</syntaxhighlight> | |||
<br> | |||
* unset関数で要素を削除する方法<br>これは、特定の要素を削除するものである。<br><br>unset関数で要素を削除しても、配列のインデックスは自動的には詰められない。<br>そのため、削除した後に配列のインデックスを振り直す場合は、array_values関数を使用する。 | |||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
$result = [72, 52, 96, 20]; | $result = [72, 52, 96, 20]; | ||
| 155行目: | 184行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
* | * array_splice関数は要素の削除も可能である。<br>これは、第3引数 (length) に削除する要素数を指定することで実現できる。<br><u>この時、第4引数は指定しないこと。</u> | ||
<syntaxhighlight lang="php"> | |||
$array = [1, 2, 3, 4, 5]; | |||
// 先頭から1つ削除 | |||
array_splice($array, 0, 1); // [2, 3, 4, 5] | |||
// 末尾から1つ削除 | |||
array_splice($array, -1, 1); // [1, 2, 3, 4] | |||
// 1番目の要素から2つの要素を削除 | |||
array_splice($array, 1, 2); // [1, 4, 5] | |||
</syntaxhighlight> | |||
<br> | |||
==== 要素の切り取り ==== | |||
* array_slice関数で要素を切り取り、新たな配列を定義することができる。<br> | |||
<syntaxhighlight lang="php"> | |||
$array = [1, 2, 3, 4, 5]; | |||
// 1番目の要素から2つ要素を切り取り、新たな配列を定義 | |||
// インデックス番号を振りなおす | |||
// array -> [1, 4, 5] | |||
// array2 -> [2, 3] | |||
$array2 = array_slice($array, 1, 2); | |||
// 1番目の要素から2つ要素を切り取り、新たな配列を定義 | |||
// インデックス番号を振りなおさず、保持する | |||
// array -> [1, 4, 5] | |||
// array3 -> [2, 3] | |||
$array3 = array_slice($array, 1, 2, true); | |||
</syntaxhighlight> | |||
<br> | |||
==== 配列の結合 ==== | |||
<syntaxhighlight lang="php"> | |||
$fruits1 = ['apple', 'orange']; | |||
$fruits2 = ['banana', 'grape']; | |||
// スプレッド演算子を使用した配列の結合 | |||
// PHP 7.4以降で使用可能 | |||
$allFruits = [...$fruits1, ...$fruits2]; // 結果: ['apple', 'orange', 'banana', 'grape'] | |||
// array_merge関数を使用した配列の結合 | |||
$mergedFruits = array_merge($fruits1, $fruits2); // 結果: ['apple', 'orange', 'banana', 'grape'] | |||
</syntaxhighlight> | |||
<br> | |||
==== 配列の再定義 ==== | |||
unset関数で要素を削除した場合、配列のインデックスは自動的には詰められない。<br> | |||
そのため、削除した後に配列のインデックスを振り直す場合は、<code>array_values</code>関数を使用して、配列を再定義する。<br> | |||
<br> | |||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
$ | // インデックスを振り直す | ||
$fruits = ['apple', 'banana', 'orange']; | |||
unset($fruits[1]); | |||
$fruits = array_values($fruits); // インデックスを振り直す | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
== 連想配列 == | == 連想配列 == | ||
==== 連想配列の定義 ==== | |||
連想配列において、要素を作成したり要素から値を取得するには、キーを指定する必要がある。<br> | 連想配列において、要素を作成したり要素から値を取得するには、キーを指定する必要がある。<br> | ||
PHPの連想配列では、キーとして整数 (正の整数、0、負の整数) と文字列を使用することができる。<br> | |||
<br> | <br> | ||
キーに整数を指定する場合は、正の整数と負の整数を指定することが可能である。<br> | キーに整数を指定する場合は、正の整数と負の整数を指定することが可能である。<br> | ||
整数を指定する場合、キーは連続した整数である必要はない。<br> | 整数を指定する場合、キーは連続した整数である必要はない。<br> | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
$var[ | // 直接代入 | ||
$var[ | $array['name'] = 'Yamada'; | ||
$var[ | $array['age'] = 25; | ||
$array['city'] = 'Aichi'; | |||
// array関数を使用して定義する場合 | |||
$array1 = array( | |||
'name' => 'Yamada', | |||
'age' => 25, | |||
'city' => 'Osaka' | |||
); | |||
// 短縮構文 (PHP 5.4以降) | |||
$array2 = [ | |||
'name' => 'Tanaka', | |||
'age' => 30, | |||
'city' => 'Tokyo' | |||
]; | |||
// 各要素にアクセスする場合 | |||
echo $array['name']; // Yamada | |||
echo $array['age']; // 25 | |||
echo $array['city']; // Aichi | |||
</syntaxhighlight> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>ただし、数値キーを使用する場合は、以下に示すことに注意する。</u><br> | |||
* キーに小数点を使用する場合、整数に切り捨てられる。 | |||
*: 例: $var[1.5]は、$var[1]として扱われる。 | |||
* キーに文字列の数字を使用する場合、整数に変換される。 | |||
*: 例: $var["2"]は、$var[2]として扱われる。 | |||
<br> | |||
また、可読性の高いコードを記述する場合は、意味のある文字列をキーとして使用することを推奨する。<br> | |||
<syntaxhighlight lang="php"> | |||
$var['number'] = 14; | |||
$var['city'] = 'Tokyo'; | |||
$var['code'] = 8400; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
| 180行目: | 295行目: | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
$var['yamada'] = 86; | $var['yamada'] = 86; | ||
$var["endou"] = 75; | $var["endou"] = 75; | ||
$var['aichi'] = 'nagoya'; | $var['aichi'] = 'nagoya'; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
なお、キーが整数で構成された文字列の場合、整数のキーが指定されたものとして扱われる。<br> | <u>なお、キーが整数で構成された文字列の場合、整数のキーが指定されたものとして扱われる。</u><br> | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
$var['8'] = 75; | $var['8'] = 75; | ||
| 192行目: | 307行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
ただし、キーが整数で構成された文字列であっても、以下のような場合は文字列のままである。<br> | <u>ただし、キーが整数で構成された文字列であっても、以下のような場合は文字列のままである。</u><br> | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
$var['08'] = 75; // 文字列08のまま | $var['08'] = 75; // 文字列08のまま | ||
| 221行目: | 336行目: | ||
// 出力 | // 出力 | ||
[price_peach] => 120 | [price_peach] => 120 | ||
</syntaxhighlight> | |||
<br> | |||
==== 連想配列の要素の存在確認 ==== | |||
<syntaxhighlight lang="php"> | |||
// 任意の要素の存在確認 | |||
if (isset($array1['age'])) { | |||
echo $array1['age']; | |||
} | |||
// デフォルト値の使用 | |||
// Nullコアレス演算子 (PHP 7以降) | |||
// キー"city"が存在しない場合は、"Unknown"となる | |||
$city = $array1['city'] ?? 'Unknown'; | |||
</syntaxhighlight> | |||
<br> | |||
==== 連想配列の操作 ==== | |||
<syntaxhighlight lang="php"> | |||
$array1 = [ | |||
'name' => 'ウェイ', | |||
'age' => 25, | |||
'country' => 'China' | |||
]; | |||
// 要素の追加 | |||
$array1['birth'] = '2024/01/01'; | |||
// 要素の変更 | |||
$array1['name'] = 'ナスティア'; | |||
$array1['age'] = '30'; | |||
$array1['country'] = 'Russia'; | |||
// 要素の削除 | |||
unset($array1['age']); | |||
// 要素数の取得 | |||
$count = count($array1); | |||
// キーの存在確認 | |||
$exists = array_key_exists('name', $array1); | |||
// 値の存在確認 | |||
$hasValue = in_array('Jap', $array1); | |||
// キーの取得 | |||
$keys = array_keys($array1); | |||
// 値の取得 | |||
$values = array_values($array1); | |||
</syntaxhighlight> | |||
<br> | |||
==== 連想配列の走査 ==== | |||
連想配列は通常の配列と異なり、全ての値をfor文で値を取得することはできない。<br> | |||
そのため、全ての値を取得する場合は、foreach文を使用して連想配列の値を取得する。<br> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// foreach文のシンタックス | |||
// キーと値の走査 | |||
// <任意の変数名 1>にはキー名、<任意の変数名 2>には値が自動的に代入される | |||
foreach (<連想配列名> as <任意の変数名 1> => <任意の変数名 2>) { | |||
// ...処理 | |||
} | |||
// 値のみの走査 | |||
foreach (<変数名> as <連想配列名>) { | |||
// ...処理 | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// キーと値の走査 | |||
foreach ($array1 as $key => $value) { | |||
echo "$key: $value\n"; | |||
} | |||
// 値のみの走査 | |||
foreach ($array1 as $value) { | |||
echo "$value\n"; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== 連想配列の結合 ==== | |||
<syntaxhighlight lang="php"> | |||
$array1 = [ | |||
'name' => 'ウェイ', | |||
'age' => 25 | |||
]; | |||
$array2 = [ | |||
'country' => 'China', | |||
'hobby' => 'Reading' | |||
]; | |||
// スプレッド演算子での連想配列の結合 | |||
$spread = [...$array1, ...$array2]; | |||
// array_merge関数の使用 | |||
// 同じキーを持つ要素がある場合、後の配列の値で上書き | |||
// 任意の数の配列を結合可能 | |||
// 数値キーは振り直される | |||
$merged = array_merge($array1, $array2); | |||
// +演算子の使用 | |||
// ただし、同じキーが存在する場合は、左側が優先される | |||
$combined = $array1 + $array2; | |||
</syntaxhighlight> | |||
<br> | |||
==== 連想配列の並べ替え ==== | |||
ただし、sort関数には連想配列の対応関係を維持しない。<br> | |||
<u><code>asort</code>関数や<code>ksort</code>関数等は連想配列にも使用できる。</u><br> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
$array = ["a" => "hoge", "z" => "piyo", "y" => "huga"]; | |||
// キーでソート | |||
ksort($array1); // 昇順 | |||
krsort($array1); // 降順 | |||
// 値でソート | |||
asort($array1); // 昇順 | |||
arsort($array1); // 降順 | |||
// カスタムソート | |||
uasort($array1, function($a, $b) { | |||
return $a <=> $b; // 宇宙船演算子 (PHP 7以降) | |||
}); | |||
</syntaxhighlight> | |||
<br> | |||
<center> | |||
{| class="wikitable" | style="background-color:#fefefe;" | |||
|+ 配列のソート関数の一覧 | |||
! style="background-color:#66CCFF;" | 関数名 | |||
! style="background-color:#66CCFF;" | ソート基準 | |||
! style="background-color:#66CCFF;" | キーと値の相関関係 | |||
! style="background-color:#66CCFF;" | ソートの順序 | |||
|- | |||
| array_multisort関数 || 値 || 連鎖配列は維持、添字配列は維持しない || 最初の配列、あるいは、ソートオプション | |||
|- | |||
| asort関数 || 値 || 維持する || 昇順 | |||
|- | |||
| arsort関数 || 値 || 維持する || 降順 | |||
|- | |||
| krsort関数 || キー || 維持する || 降順 | |||
|- | |||
| ksort関数 || キー || 維持する || 昇順 | |||
|- | |||
| natcasesort関数 || 値 || 維持する || 大文字・小文字を区別しない自然順 | |||
|- | |||
| natsort関数 || 値 || 維持する || 自然順 | |||
|- | |||
| rsort関数 || 値 || 維持しない || 降順 | |||
|- | |||
| shuffle関数 || 値 || 維持しない || ランダム | |||
|- | |||
| sort関数 || 値 || 維持しない || 昇順 | |||
|- | |||
| uasort関数 || 値 || 維持する || ユーザ定義 | |||
|- | |||
| uksort関数 || キー || 維持する || ユーザ定義 | |||
|- | |||
| usort関数 || 値 || 維持しない || ユーザ定義 | |||
|} | |||
</center> | |||
<br> | |||
==== 連想配列の変換 ==== | |||
<syntaxhighlight lang="php"> | |||
// 連想配列をJSON形式に変換 | |||
$json = json_encode($array1); | |||
// JSONを連想配列に戻す | |||
$array = json_decode($json, true); | |||
// 連想配列のフィルタリング | |||
$filtered = array_filter($array1, function($value) { | |||
return $value > 20; // 20より大きい値のみ抽出 | |||
}); | |||
// 連想配列の要素を変換 | |||
$mapped = array_map(function($value) { | |||
return $value * 2; // 各要素を2倍にする | |||
}, $array1); | |||
</syntaxhighlight> | |||
<br> | |||
==== エラー処理 ==== | |||
<syntaxhighlight lang="php"> | |||
// 安全なアクセス | |||
$value = isset($array1['key']) ? $array1['key'] : 'default'; | |||
// または | |||
$value = $array1['key'] ?? 'default'; // PHP 7以降 | |||
// エラー回避 | |||
try { | |||
$value = $array1['nonexistent']; | |||
} | |||
catch (Error $e) { | |||
// エラー処理 | |||
} | |||
</syntaxhighlight> | |||
<br><br> | |||
== 配列の引数展開 == | |||
引数展開は可変⻑配列とは逆であり、配列を引数に展開することもできる。<br> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
function output($a, $b, $c) | |||
{ | |||
echo $a . PHP_EOL; // hoge | |||
echo $b . PHP_EOL; // piyo | |||
echo $c . PHP_EOL; // huga | |||
} | |||
// 配列を展開して引数に渡す | |||
$array = ["hoge", "piyo", "huga"]; | |||
output(...$array); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||