» home

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で見た記憶があるのですがうろ覚え&検索してもここまでしかわからず。

By: funaki | 2006年6月17日 | いじる | Trackback | Comments [RSS 2.0]

5 Comments »

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

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

    Comment by ttsuruoka@unoh — 2006年6月19日 @ 10:30

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

    Comment by funaki — 2006年6月20日 @ 08:50

  3. 重箱ですが,多分

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

    Comment by ELF — 2006年6月22日 @ 12:51

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

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

    Comment by Saiya — 2006年7月23日 @ 22:50

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

    Comment by Saiya — 2006年7月23日 @ 22:50

RSS feed for comments on this post. TrackBack URI

コメントはお気軽にどうぞ

↑top