PHPで文字列のポインタをC言語風に進める

#include <stdio.h>
int main(int argc, char *argv[])
{
    char *str;
    str = argv[1];
    while (*str != '\\0') {
        printf("%c\\n", *str);
        str++;
    }
    return 0;
}

C言語で書くと以上のような処理をPHPで書きたいとき。

<?php
$str = $argv[1];
for ($i = 0; isset($str[$i]); $i++) {
    echo $str[$i]."\\n";
}

こういうときはissetが速い。こんな処理が必要になることは滅多にないのですが、、文字列中に半角の文字が何文字あるか数えたい時とか正規表現だと遅い時とかに使えるかと。

phpspotで前の記事を紹介していただいた中で、全角で関数名や変数が書ける、という面白い構文が紹介されていたので自分も使ったことのある変なのを書いてみました。

あと、issetは複数の引数を取れる、というTIPSは最近面白いこちらのブログに。

» ウノウラボ Unoh Labs: isset()って

あと,is_string() とか is_int() ってアンダーバーで区切られているのに,
なぜか isset() は is_set() ではないんですよね.

ちなみにこれは歴史的経緯だったような。今のCODING_STANDARDSだとis_*が命名規則に則っていますがissetとかsetcookieはその規則を適用する前だったとか。PHP-usersのMLで見た記憶があるのですがうろ覚え&検索してもここまでしかわからず。

This entry was posted in いじる. Bookmark the permalink. Both comments and trackbacks are currently closed.

5 Comments

  1. Posted 2006/06/19 at 10:30 am | Permalink

    なるほど,isset() は歴史的経緯でしたか.
    情報ありがとうございます.

    is_set() っていうエイリアスがあればいいんですけどねぇ.

  2. Posted 2006/06/20 at 8:50 am | Permalink

    コメントありがとうございます!
    確かにエイリアスがあってもいいですね。PHPで自分で定義する程ではありませんが。

  3. Posted 2006/06/22 at 12:51 pm | Permalink

    重箱ですが,多分

    $len = strlen( $str);
    for ($i = 0; $i

  4. Saiya
    Posted 2006/07/23 at 10:50 pm | Permalink

    文字列内の文字に [ ] でアクセスするための方法は下位互換目的で、 { } でのアクセスを推奨するとかドキュメントにありましたよ。
     
    http://php.s3.to/man/language.types.string.html より引用:
    波括弧の後に任意の文字をゼロから始まるオフセットで指定することに より、文字列内の文字にアクセス/修正することが可能です。

    注意: 過去の互換性のため、配列括弧を使用することが可能です。しかし、 この構文はPHP 4に依存しています。

  5. Saiya
    Posted 2006/07/23 at 10:50 pm | Permalink

    >アクセスするための方法
    アクセスする方法orz

Page optimized by WP Minify WordPress Plugin