PHPで文字列を1文字ずつチェックする方法


PHP LogoPHPでCSVを読み込むときの話。CSV読み込みなんて一行ごとに explode(“,”, $hogehoge); でいい気もするんですけれど、そうではなくて、カンマごとに要素を取得する、なんて言うことをしたかったんです。要はPHPで文字列処理ですね。次のカンマまで文字数を取って、カンマが来たら substr する、みたいな。

「カンマが来たら」なんて一文字ごとにチェックしなければならないんですけど、いちいち substr($hogehoge, 0, 1); なんてやってたら遅そうだし・・・。

なんとかC言語のポインタみたく、一文字ごとにトレースするような方法ないのかなぁ・・・。

Creative Commons License photo credit: acidpix

そんなときはGoogle先生!ということで調べてみると、このサイトにたどり着きました。

zuraraさん — http://blog.zuzara.com/2006/06/17/88/

なぬ?配列のように $hogehoge[0] とかすると1文字だけとれるとな?!試しに書いたプログラムがこちら。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/php -q
<?php
  $a = "Hello World!";
  echo $a[0]."\n";
//
//  結果
//  H
//  e
//  l
//  l
//  o
//
//  w
//  o
//  r
//  l
//  d
//  !
//
?>

おお、できた。なるほど、1文字ずつチェックするにはこの方法が良さそうです。