動かざることバグの如し

近づきたいよ 君の理想に

PHPで文字列を1文字ずつ分割する方法が進化してた

令和最新版のPHPは一味違うぜ

概要

すごく昔に、PHPで文字列を1文字ずつの配列に変換する方法について記事を書いた。

thr3a.hatenablog.com

このときはメモ程度だったが、実は今でもそこそこPVがある。

流石に令和だしPHP7どころか8も出たしなにかアップデートあるやろ〜と冗談でドキュメント見てたら本当に進化してた。

環境

  • PHP 7.4以上

コード

ついにマルチバイト対応の関数mb_str_split()が実装された。以下のようにかける。

<?php
$str = "abcdeあい う えお";
$result = mb_str_split($str);
var_dump($result);

結果

array(12) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "d"
  [4]=>
  string(1) "e"
  [5]=>
  string(3) "あ"
  [6]=>
  string(3) "い"
  [7]=>
  string(1) " "
  [8]=>
  string(3) "う"
  [9]=>
  string(3) " "
  [10]=>
  string(3) "え"
  [11]=>
  string(3) "お"

すげーーーーーーーー

PHP 8.0では

当然動く。が、8.0から失敗時の挙動が変わっているので注意。

この関数は、失敗時に false を返さなくなりました。