ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
連想配列の作成と基本操作
// 作成
$user = [
'name' => 'Taro',
'age' => 30,
'roles' => ['admin', 'editor'],
];
// 旧式の書き方 (PHP 5.3 以前)
$user = array('name' => 'Taro', 'age' => 30);
// アクセス
echo $user['name']; // Taro
// 追加・更新
$user['email'] = 'taro@example.com';
$user['age'] = 31;
// 削除
unset($user['roles']);
// 存在チェック
isset($user['name']); // true (null だと false)
array_key_exists('age', $user); // true (null でも true)
// サイズ
count($user); // 要素数
// 全削除
$user = [];
各言語の Map 表記比較
| 言語 | 表記 |
|---|---|
| PHP | ['name' => 'Taro', 'age' => 30] |
| Java | Map.of("name", "Taro", "age", 30) |
| JavaScript (Object) | { name: 'Taro', age: 30 } |
| JavaScript (Map) | new Map([['name','Taro'],['age',30]]) |
| Python (dict) | {'name': 'Taro', 'age': 30} |
| Kotlin | mapOf("name" to "Taro", "age" to 30) |
順序の保持
PHP の連想配列は挿入順を保持します(PHP 7 以降は実装レベルでも安定):
$arr = [];
$arr['c'] = 3;
$arr['a'] = 1;
$arr['b'] = 2;
foreach ($arr as $k => $v) echo "$k=$v ";
// c=3 a=1 b=2 (挿入順)
// ソートしたい場合
ksort($arr); // キーでソート
asort($arr); // 値でソート (キー保持)
arsort($arr); // 値降順
uksort($arr, fn($a, $b) => strcmp($a, $b)); // カスタム
マージ操作: array_merge / + / spread
$a = ['x' => 1, 'y' => 2];
$b = ['y' => 20, 'z' => 30];
// array_merge: 後勝ち (文字列キーで上書き)
array_merge($a, $b);
// ['x' => 1, 'y' => 20, 'z' => 30]
// + 演算子: 先勝ち (左側優先)
$a + $b;
// ['x' => 1, 'y' => 2, 'z' => 30]
// 数値キーは挙動が違う
$a = [10, 20, 30];
$b = [100, 200, 300];
array_merge($a, $b);
// [10, 20, 30, 100, 200, 300] 数値キーは振り直し
$a + $b;
// [10, 20, 30] 数値キーは先勝ち → b は破棄
// PHP 7.4+ Spread
$merged = [...$a, ...$b]; // array_merge 相当
// PHP 8.1+ 文字列キー Spread
$merged = ['x' => 1, ...$b]; // OK (PHP 8.1+)
ネストされた Map
$config = [
'database' => [
'host' => 'localhost',
'port' => 3306,
'options' => [
'charset' => 'utf8mb4',
'timezone' => '+09:00',
],
],
'cache' => [
'driver' => 'redis',
],
];
// ネストアクセス
echo $config['database']['options']['charset']; // utf8mb4
// 存在チェック (ネスト深いと面倒)
isset($config['database']['options']['charset']);
// Null Coalescing でショートカット
$charset = $config['database']['options']['charset'] ?? 'utf8';
// Laravel data_get / Arr::get
data_get($config, 'database.options.charset', 'utf8');
\Illuminate\Support\Arr::get($config, 'database.options.charset', 'utf8');
検索性能とメモリ
| 操作 | 計算量 | 備考 |
|---|---|---|
$arr[$key] | O(1) | ハッシュ参照 |
isset($arr[$key]) | O(1) | 速い |
array_key_exists() | O(1) | isset より若干遅い |
in_array($v, $arr) | O(n) | ★ 値検索は遅い |
array_search($v, $arr) | O(n) | 同上 |
count($arr) | O(1) | キャッシュされている |
PHP 配列は1 要素あたり 100-150 byte 程度(zend_array のオーバーヘッド)を消費。大量データには SplFixedArray や generator を検討。
Laravel Collection との比較
use Illuminate\Support\Collection;
// 配列をコレクション化
$users = collect([
['name' => 'Taro', 'age' => 30],
['name' => 'Hanako', 'age' => 25],
['name' => 'Jiro', 'age' => 40],
]);
// チェーン操作
$result = $users
->filter(fn($u) => $u['age'] >= 30)
->sortByDesc('age')
->map(fn($u) => $u['name'])
->values()
->all();
// ['Jiro', 'Taro']
// reduce
$totalAge = $users->reduce(fn($sum, $u) => $sum + $u['age'], 0); // 95
// groupBy / countBy
$byRole = $users->groupBy('role');
命名規則 (PSR-12 / 一般慣習)
- キーは snake_case が PHP の慣習 (
user_id) - JS と JSON 互換を意識する場合は camelCase (
userId) - 定数キー (config) は SCREAMING_SNAKE_CASE (
DB_HOST) - クラスのプロパティは camelCase / フィールドアクセスと統一
FAQ
Q: PHP に純粋な「リスト」と「Map」の区別はある?
A: 内部的には全部「順序付き連想配列」。array_is_list() (PHP 8.1+) で「0 始まり連番のキー」かを判定可能。
Q: SplObjectStorage や WeakMap はいつ使う?
A: オブジェクトをキーにしたい場合。連想配列は文字列・数値キーしか持てません。WeakMap (PHP 8) は GC 対象に弱参照を持てます。
Q: 連想配列 vs オブジェクトの使い分け
A: 構造が決まっているなら class / readonly value object、汎用データなら連想配列。最近は DTO / Enum / record-like なクラスが推奨です。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- SEO タイトル設計とキーワード配置完全ガイド (CTR / LLMO 対応) 2026-06-10 18:13:56
- Vue.js v-bind 完全ガイド (属性 / クラス / スタイル / Composition API) 2026-06-10 18:13:56
- Twitter (X) プラットフォーム完全ガイド 2026 (API / Premium / 競合) 2026-06-10 18:13:56
- PHP 変数スコープ完全ガイド (global / static / use / Arrow Function) 2026-06-10 18:13:56
- jQuery .height() 完全ガイド (innerHeight / outerHeight / box-sizing) 2026-06-10 18:13:56
- WordPress 主要独自関数完全ガイド (Loop / Enqueue / Hook / Conditional Tag) 2026-06-10 18:13:56
- jQuery 要素・値の削除完全ガイド (remove / detach / empty / val) 2026-06-10 18:13:56
- PHP コメント完全ガイド (// / # / /* */ / PHPDoc) 2026-06-10 18:13:56
- PHP 改行出力 (\n / PHP_EOL / nl2br) 完全ガイド 2026-06-10 18:13:56
- JavaScript 確認ダイアログ完全ガイド (confirm / alert / prompt / dialog) 2026-06-10 18:13:56
- UE5 スクリーンショット保存 (Scene Capture) 完全ガイド 2026-06-10 18:12:53
- UE5 Nav Mesh Bounds Volume 完全ガイド 2026-06-10 18:12:53
- EJS テンプレートの共通化 (include) 完全ガイド 2026-06-10 18:12:53
- UE5 カメラ傾き角度制限完全ガイド (Pitch Min/Max) 2026-06-10 18:12:53
- SQLite 完全ガイド (組み込み RDBMS) 2026-06-10 18:12:53
コメントを削除してもよろしいでしょうか?