PHP 配列と fscanf に関する注意事項

WBOY
リリース: 2016-06-23 13:52:37
オリジナル
1498 人が閲覧しました

前のブログ投稿では、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 );?>
ログイン後にコピー

結果は次のようになります: print_r 文の入力から上記の結果から、PHP の配列は実際には「マップされたコレクション」であることがわかります。これは、Python の辞書や Java の Map に似たデータ構造です。したがって、添え字は連続的である必要はなく、離散的であってもよく、添え字の値は必ずしも整数である必要はなく、任意のデータ型にすることができます。ここでの添え字の値は、実際にはキーと値のペアのキー名と同じです。添字(キー名)が配列内に存在しない場合、php から返されるデフォルト値は空の文字列 "" です。

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、およびその他の関数を使用して文字列を解析し、必要なデータを取得します。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!