【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はまだまだわからないことだらけです・・・
«前の記事:2015年07月01日はうるう秒が追加されるJavascriptで画面ロックする:次の記事»