Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
なぜarray_firstとarray_lastは採用、 array_value_firstと...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
02
March 22, 2026
Technology
490
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは 見送りだったか / Why array_value_first and array_value_last was declined, then why array_first and array_last was accpeted?
2026/03/22 PHPerKaigi 2026 LTにて話したときに使用したスライドです
02
March 22, 2026
More Decks by 02
See All by 02
Amazon ECS Managed Instances が リリースされた!キャッチアップしよう!! / Let's catch up Amazon ECS Managed Instances
cocoeyes02
0
530
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
1.9k
PHP8.4におけるJITフレームワークIRと中間表現について理解を深める
cocoeyes02
1
1.3k
RemoveだらけのPHPUnit 12に備えよう
cocoeyes02
0
1.3k
PHP RFC: Deprecate implicitly nullable parameter types をサクッと話す
cocoeyes02
0
1.1k
PHPUnit 11 概論
cocoeyes02
5
3.8k
Random\Randomizer クラスで日常のあれこれを解決しよう! / Random\Randomizer class solves familiar trouble
cocoeyes02
1
1.4k
BASEにおける インシデント対応フローと工夫
cocoeyes02
0
1.3k
AWS Lambdaから始める Devチームの小さなDevOps改善 〜QCDどれも諦めない運用を目指して〜 / Start to improving small DevOps with AWS Lambda by Dev Team
cocoeyes02
0
1.5k
Other Decks in Technology
See All in Technology
Chainlitで作るお手軽チャットUI
ynt0485
0
200
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.9k
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.9k
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
790
脆弱性対応、どこで線を引くか
rymiyamoto
0
360
自律型AIエージェントは何を破壊するのか
kojira
0
150
フロンティアAIのゲート化と地政学リスク
nagatsu
0
120
日本 Fintech 未来予測レポート 2027〜2028年(オリジナル版)
8maki
0
1.7k
ACE-Step-1.5で見る 音楽生成AIのしくみと“破綻だけ直す”Retake機能の開発【zennfes spring 2026 登壇資料】
personabb
1
130
AIソロプレナー時代に2ヶ月で20人増員した事業創造会社の開発組織の話
miyatakoji
0
600
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
120
Microsoft Build Keynoteふりかえり
tomokusaba
0
120
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Into the Great Unknown - MozCon
thekraken
41
2.6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
830
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
360
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Documentation Writing (for coders)
carmenintech
77
5.4k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
54k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.7k
Transcript
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか | BASE,
Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは 見送りだったか 02 @PHPerKaigi2026 2026.03.22
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか Speaker Profile
2 02 Otsu Kazuki BASE BANK Dept. Engineering Program Manager :@cocoeyes02 PHPカンファレンス2024, 2025 実行委員長
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 3 本日のまとめ
• array_value_first / array_value_last ◦ 論点が収束しないまま投票に進み、否決された ◦ 主な論点は、空配列の扱いと、汎用化の是非 • array_first / array_last ◦ 既存array関数と一貫性を保ち、対応するスコー プを絞ることで、同意が得られ採択された
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか © 2012-2026
BASE, Inc. 4 array_first / array_lastとは? 4
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 5 array_first
/ array_lastとは? PHP 8.5において、配列の最初 / 最後の値を取得できる新関数 array_first と array_last が導入された https://www.php.net/releases/8.5/ja.php
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか PHP 8.4まで
6 array_first / array_lastとは? $array = [2 => 'first', 'hoge' => 'c', 1 => 'last']; echo $array[0]; // Warning: Undefined array key 0 echo reset($array); // "first"(内部ポインタの副作用あり) echo end($array); // "end"(内部ポインタの副作用あり) echo $array[array_key_first($array)]; // "first" echo $array[array_key_last($array)]; // "last"
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか PHP 8.5から
7 array_first / array_lastとは? $array = [2 => 'first', 'hoge' => 'c', 1 => 'last']; echo array_first($array); // "first" echo array_last($array); // "last" echo array_first([]); // NULL echo array_last([]); // NULL
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか © 2012-2026
BASE, Inc. 8 array_first / array_last 採用までの時系列 8
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 9 2013/05/17
2016/01/01 2018/06/11 2018/07/09 2025/03/31 2025/04/22 array_first / array_last採用までの時系列 初出のPRがopen 最初のRFC公開 2つ目のRFC公開(array_key_first / array_key_last と、 array_value_first / array_value_last) 2つ目のRFC投票(key系は採択(PHP 7.3)、value系は否決) 3つ目のRFC公開(array_first / array_last) 3つ目のRFC投票(採択(PHP 8.5))
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 10 2013/05/17
2016/01/01 2018/06/11 2018/07/09 2025/03/31 2025/04/22 array_first / array_last採用までの時系列 初出のPRがopen 最初のRFC公開 2つ目のRFC公開(array_key_first / array_key_last と、 array_value_first / array_value_last) 2つ目のRFC投票(key系は採択(PHP 7.3)、value系は否決) 3つ目のRFC公開(array_first / array_last) 3つ目のRFC投票(採択(PHP 8.5)) 今回はarray_value_first / array_value_lastの否決と array_first / array_lastの採択について話します!
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか © 2012-2026
BASE, Inc. 11 なぜarray_value_firstと array_value_lastは見送りだったか 11
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 関数名以外は、array_first /
array_lastと仕様は同じだが、目 立った論点が2つあった • 空配列の時の返り値について • 汎用化 vs 単機能 12 array_value_first / array_value_lastの仕様
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 値がNULL or
空配列 区別がつかない 13 目立った論点1:空配列の時の返り値について $array2 = [2 => null, 'hoge' => 'c', 1 => null]; echo array_value_first($array2); // NULL echo array_value_first([]); // NULL echo array_value_first($hoge); // NULL // $hoge は 最初の値がNULL?それとも空配列?
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 14 汎用化派
• 「index/offset で任意の位置のキーや値を取りたい」 • 「タプルつかって1メソッドでキーも値も返したい」 目立った論点2:汎用化 vs シンプル [$key, $value] = array_first($array); [$key, $value] = array_last($array); //(0なら最初、-1なら最後) $key = array_key_index($array, 0, &$value);
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 15 シンプル派
• 「個別関数の方が直感的だし、タプル返却はPHPコア関数の 慣例にない」 • 「index/offsetはO(n)。first/lastはO(1)で十分」 $value = array_value_first($array); $value = array_value_last($array); 目立った論点2:汎用化 vs シンプル
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 16 結果はYes:15,
No:18で否決(当時は過半数のYesで採択) … 落とし所が決まらないまま投票へ https://wiki.php.net/rfc/array_key_first_last
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 17 RFCにも下記のような事が(意訳)
> (前略)RFCが完成し、すべての詳細が検討され議論されたと 判断された場合、 RFCは投票フェーズに移行できます。RFCには 未解決の疑問点があってはなりません。(後略) 落とし所が決まらないまま投票へ https://wiki.php.net/rfc/howto
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか © 2012-2026
BASE, Inc. 18 なぜarray_firstとarray_lastは 採用されたか 18
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 19 array_value_first
/ array_value_lastと同じ仕様にも関わらず、 採択された要因は大きく2つ • 既存機能(array関数)との一貫性を保つ • 今回のRFCで対応するスコープを絞る この2つの要因を踏まえて、前回のRFCの論点が今回どうなのか見 ていく 今回のRFCが採択された要因
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 20 •
array_first / array_last だけ仕様を変えると一貫性が崩れる • • • • • 「変えるなら全部変える」で今回のRFCのスコープ外に ◦ スコープ外になっただけで、解決したわけじゃない array_pop([]); array_shift([]); // NULL array_key_first([]); // NULL (PHP7.3) array_find([], fn($v) => true); // NULL (PHP 8.4) 前回のRFCの論点①:空配列の時の返り値について
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 21 •
タプルや汎用化はスコープから外す方針で、異論がなかった ◦ タプルに関しては、そもそも求める声が出なかった ◦ 汎用化は求める声があったが、別のRFCに委ねられた ▪ 汎用化された関数はいつか出てくるかもしれない 前回のRFCの論点②:汎用化 vs シンプル
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 22 •
reset / end では readonly プロパティに使えない ◦ PHP 8.2 (2022年) で readonly が入った ◦ 副作用を避けたい → そもそも使えないが発生するように • 他の関数名と命名規則を統一した ◦ キーを操作する関数は名前に「key」が含まれる ◦ 値を操作する関数は名前に「value」が含まれない 他にも前回のRFCとの違いが
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 23 •
reset / end では readonly プロパティに使えない class EventList { public function __construct( public readonly array $events ) {} } $list = new EventList(['a', 'b', 'c']); reset($list->events); // Cannot pass readonly property by reference array_first($list->events); // 'a' ← 動く 他にも前回のRFCとの違いが
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 24 結果はYes:35
No:0で、満場一致の賛成! … 議論も落ち着き、満を持して投票へ https://wiki.php.net/rfc/array_first_last
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 25 PHP
コントリビューターたちは、メーリスや RFC を通して、 様々な観点から、議論を重ねてリリースしています。 • 理想的な設計 • パフォーマンス • PHP らしさ 議論の流れを追っていくと、ただ歴史を知るだけでなく、PHPや 設計への理解を深めることができます。是非追ってみましょう! 最後に
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 26 •
PHP manual: array_first • PHP manual: array_last • PHP manual: end • PHP manual: reset • PHP manual: rfc:howto 参考文献(PHPマニュアル)
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 27 •
PHP RFC: array_key_first_last_index • PHP RFC: array_key_first(), array_key_last() and array_value_first(), array_value_last() • PHP RFC: array_first() and array_last() 参考文献(PHP RFC)
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 28 •
Github PR: Add array_key_first(), array_key_last(), and array_key_index() • Github PR: Add implementation and tests for array_key_first, array_key_last and array_value_first, array_value_last • Github PR: [RFC] Implement array_first() and array_last() 参考文献(Github PR)
#phperkaigi #a © 2012-2026 BASE, Inc. なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは見送りだったか 29 •
externals.io: [RFC] array_key_(first|last|index) functions proposal • externals.io: [RFC][Under Discussion] Add functions array_key_first() and array_key_last() • externals.io: [VOTE] array_key_first(), array_key_last(), array_value_first(), array_value_last() • externals.io: Two new functions array_first() and array_last() • externals.io: [RFC] [Discussion] array_first() and array_last() • externals.io: [RFC] [Vote] array_first() and array_last() 参考文献(externals.io)