【PHP】文字列を配列のように簡単に抜き出す方法



PHPを長らく使っていたのに初めて気づきました。
文字列の変数に配列のようにアクセスすると1文字抜き出すことが可能なのです。

今使っているシステムで、このアクセスが元でエラーが発生したのでメモ。


文字列変数に配列アクセス

文字列に配列のように[]を使ってアクセスしてみる。
<?php
$hoge = 'hoge';
var_dump($hoge[0]);
var_dump($hoge[1]);
var_dump($hoge[2]);
var_dump($hoge[3]);
?>
実行結果
string(1) "h"
string(1) "o"
string(1) "g"
string(1) "e"
文字列を配列のようにアクセスすることが出来ました。

おそらくPHPの文字列ってchar型を配列にしてstring型と定義しているようですね。
通常のように使う時は文字列として返して、文字列変数に配列のようにアクセスした時はcharを返すようです。
これはPHPの柔軟すぎる作りのせいですね・・・

Illegal offset typeの注意

PHPで文字列に対して存在しないキーをを指定すると「Illegal offset type」が発生します。
これですが、文字列キーで問い合わせた場合にとても困る現象が発生致します。
<?php
$hoge = 'hoge';
var_dump($hoge[0]);
var_dump($hoge[1]);
var_dump($hoge[2]);
var_dump($hoge[3]);

// 5文字目にアクセス
var_dump(@$hoge[4]);		// エラー抑止のため@

// hogeにアクセス
var_dump(@$hoge['hoge']);	// エラー抑止のため@
?>
実行結果
string(1) "h"
string(1) "o"
string(1) "g"
string(1) "e"
string(0) ""
string(1) "h"

本当なら「Illegal offset type」が発生しますが、今回は@を使って抑止させて頂きます。
$hoge[4]のアクセスでは空白「”」が返却されますが、$hoge[‘hoge’]のアクセスではhが返されています。
これは文字列に文字列キーでの問い合わせがあった場合はindex = 0として扱ってしまうようです。
数字キーの場合は空白が返ってくるのに・・・

私の場合はこれが原因でエラーが発生した箇所がありましたのでみなさんご注意ください。
PHPはまだまだわからないことだらけです・・・


コメントを残す