全然違うような
これ全然JavaScriptのindexOfと関係ないんじゃないですか?
PHPでJavaScriptにあるindexOf関数を実装するコードスニペットが公開されてます。
<?php function indexOf($needle, $haystack) { for ($i=0;$i<count($haystack);$i++) { if ($haystack[$i] == $needle) { return $i; } } return false; } ?>
とりあえず適当なサイトを探して引用.
■文字列の検索
文字列の検索は indexOf と lastIndexOf で行います。
indexOf は前から、 lastIndexOf は後から検索し、 検索された文字列の場所を charAt と同じ数え方で返します。
str.indexOf(searchstring, [index])で、 indexから searchstring を検索し最初に見つかった場所を返します。str1 = "0123456789012345678901234";
pos1 = str1.indexOf("1"); // 1
pos2 = str1.lastIndexOf("1"); // 21
pos3 = str1.indexOf("123", 2); // 11
pos4 = str1.lastIndexOf("123", 2); // 1
以下、特殊な場合:
str1 = "0123456789012345678901234";
pos5 = str1.indexOf("a"); // -1
pos6 = str1.indexOf("1", -1); // 1
pos7 = str1.lastIndexOf("1", -1); // -1
pos8 = str1.indexOf("1", 50); // -1
pos9 = str1.lastIndexOf("1", 50); // 21
そう.全然違うんです.
- | JavaScriptのindexOf | phpspotの紹介のindexOf |
対象とする型 | 文字列 | 配列 |
範囲 | 文字列(上記で言うsearchstring)の一部 | 配列要素の値全体 |
追加機能 | オフセット位置の指定ができる | ない |
補足 | - | array_search()で同じことができる |
- 配列要素を数字でしか舐めないため,連想配列に使えない(こういうのはarray_keysとforeachなどじゃないですか?)
foreach ( array_keys( $foo) as $name) { $val = $foo[ $name]; }
- forの中にcountがあるため,パフォーマンスが著しく落ちる(PHP 5.1.4,アクセラレーターなし.10回程度やっておおよそ近い数字)他にもいろいろ動いているので,誤差はある程度出てしまっていますが,count()を外に出すかどうかで場合によっては200%近くパフォーマンスに差が出ることに注目.
$ time php -dmemory_limit=256M -r ' $foo = array_fill( 0, 2000000, 0); for ( $i = 0; $i < count( $foo); ++$i) { ++$foo[ $i];}' real 0m2.767s user 0m2.340s sys 0m0.428s $ time php -dmemory_limit=256M -r ' $foo = array_fill( 0, 2000000, 0); $counts = count( $foo); for ( $i = 0; $i < $counts; ++$i) { ++$foo[ $i];}' real 0m1.724s user 0m1.364s sys 0m0.360s
総括として
- JavaScriptのindexOfと全然関係ない間違った記事
- サンプルもPHP 4.0.5から使用できるarray_search()で代用できる.サンプルとしてもちょっとつらい.