ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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アノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?