前のブログ投稿では、PHP の配列には範囲外の添字がないことを述べました。次のプログラムは正常に実行できます:
<?phpprint count($w) . "\n";$w[3] = "rt";$w[100] = "tt";print $w[0] . $w[1] . $w[2] . $w[3] . $w[100] . "\n";print_r( $w );?>
PHP の fscanf 関数にも注意して、次の C++ コードを見てください:
0rtttArray( [3] => rt [100] => tt)
キーボードから 1 2 3
という行を入力すると、プログラムは正しい結果を出力できます。 1 2 3
そして、このプログラムを次のように php に書き換えるだけです:
#include<iostream>using namespace std;int main(){ int a[3]; for( int i = 0; i < 3; i++ ) scanf( "%d", a+i ); cout << a[0] << " " << a[1] << " " << a[2] << endl; return 0;}
つまり、scanf を fscanf に変更すると、期待した結果が得られません。その理由は、PHP の fscanf は入力内の「1 行」を入力単位として解析するため、「1 2 3」を入力した後、PHP は文字列から最初の整数値 1 を解析し、それを a[0] の後に代入するためです。文字列内の残りの文字は無視され、プログラムは次の行の入力を待ちます。これは、C++ の scanf と php の fscanf の違いです。 PHP の最初のファイル読み取り関数は、基本的に「行」単位であることに注意してください。
PHP がスムーズに入力できるようにするには、通常 2 つの方法があります。 1. たとえば、上記の fscanf の 2 番目のパラメーターを「%d%d%d」に変更します。 2 fgets 関数を使用して行を読み取り、split、int、およびその他の関数を使用して文字列を解析し、必要なデータを取得します。