チュートリアル|入門チュートリアル|文字列
どの言語であっても、文字列操作は重要な基礎であり、多くの場合シンプルかつ重要です。人間の音声と同じように、一般に形式 (グラフィカル インターフェイス) と言語 (印刷文字列?) があり、文字列でさらに多くのことを説明できます。 PHP には、強力で比較的簡単に使用できる多数の文字列操作関数が用意されています。詳細については、[url]http://cn2.php.net/を参照してください。 Manual/zh/ ref.strings.php[/url] の機能と特徴を以下に簡単に説明します。
弱い型付け
PHP は弱い型付け言語であるため、他のタイプのデータは一般に文字列操作関数に直接適用でき、:
echo substr ( など) のように処理のために文字列型に自動的に変換できます。 "1234567"、1、3);
と
echo substr( 123456、1、 3 );
は
と同じです
定義
通常、文字列を識別するには二重引用符または一重引用符を使用します。たとえば、
$str = "愛しています";
$str = '愛しています'
; 両者にはいくつかの違いがあります。後者はすべての一重引用符を文字として扱いますが、前者は扱いません。たとえば、 $test
= "iwind";
$str = "$test が大好きです" $str1
= ; '$test が大好きです' ; echo $str
; //iwind を取得します echo
$str1; と同じ次の 2 つの例の動作も異なります:echo
"i love test"
; // は t をエスケープとして扱った i love est を取得します
echo ' i love test ';
// は i love test を取得します。したがって、二重引用符で囲まれた内容は「説明されている」と考えることができ、一重引用符で囲まれた内容は「表示されている内容は次のとおりです」となります。 (特に''
は'')として認識されます。明らかに、二重引用符の形式はより柔軟です。もちろん、ここでは説明しませんが、いくつかの特別な場合には一重引用符の方が適しています。 出力 PHP で最も一般的に使用される出力は echo、print です。 どちらも実際の関数ではなく、言語構造体であるため、呼び出し時に二重括弧を使用する必要はありません (echo(
など) "test "
);print("test")).どちらも出力時に値を割り当てることができます: echo $str="test"
; //一方では test を出力し、他方では文字列変数 $str に "test" を代入します print $str="test"
;名前の違いに加えて、この 2 つは他にも違いがあります。 print には戻り値があり、常に 1, を返しますが、echo には戻り値がありません。そのため、echo は print:
$return =print "test"; よりも高速です。 return
; //出力 1 このため、print は複合ステートメントで使用できますが、echo は
:
isset($str) または print
"str 変数 未定義";//「str 変数は未定義です」を出力します isset($str
) または echo 「str 変数は未定義です」;// 分析を要求します エラー echo は一度に複数の文字列を出力できますが、print は出力できません:
"i ",
"love ","iwind" // 出力します"i love iwind" print "i ","love "
,"iwind"// エラーが表示されます echo, ; 印刷:echo <<< タグ名
... 文字列内容 ..
のような構文を使用して、「ドキュメント構文」と呼ばれる文字列を出力することもできます。タグ名;ラベル名は同じであり、後者のラベル名の前に空白スペースを入れてはなりません。つまり、正方形の形式で記述する必要があります。ドキュメント構文出力の内容では、二重引用符とほぼ同じ変数名と一般的な記号 、
が識別されます。
出力 echo、
print に加えて、PHP は、printf
、sprintf、
vprintf、
など、文字列 、 をフォーマットするためのいくつかの関数も提供します
vスプリント
、
ここでは詳しい説明はありません。
接続 "." 演算子を使用して 2 つ以上の文字列を接続し、文字列の順序で新しい文字列を形成します。
$str
= 「i」。「iwind」 ここでの $str は 「iloveiwind」です。 ; 文字列。もちろん、 .= 演算子:$str
=
"" //初期化
$str .= も使用できます。 」 I love iwind"; 未定義の変数を使用すると通知エラーが生成されるため、ここでは初期化が使用されます。"" または null は単に空の文字列を表すことができます。
LengthPHP は、文字列の長さを計算する strlen 関数を提供します:$str = "test";
echo strlen($str); // 将输出 4
有点奇怪的是strlen将中日等汉字以及全角字符都当作两个或四个长度计算。好在mbstring或icon两个函数可以帮助解决这个问题,比如:
$len = iconv_strlen($str, "GBK");
$len = mb_strlen($str, "GBK");
注:mbstring模块提供了大量的对含有多字节字符的字符串的处理函数,推荐多加应用,由于这篇文章讲的是字符串入门,所以不打算详细解说。
分離と連結
PHP では、区切り文字に従って文字列を配列に分割したり、配列を文字列に結合したりすることができます。次の例を参照してください:
$str = "i love iwind"; $str
); 上記のexplode関数は、$str文字列をスペース文字で区切って、配列$arrayを返します。 :array("i", "love", " iwind")。explode関数に似た
関数には、preg_split()、splitiが含まれます。 ()、split()およびその他の関数。 対照的に、implode と join は、配列を文字列に結合することができ、まったく同じ機能を持つ関数です。 $array = array("i", "love", "iwind");
(
" ", $array); この例の implode 関数は、配列 $array の各要素をスペース文字で接続し、文字列 $str を返します: "i love iwind" .
Crop 文字列の先頭と末尾は必要な部分ではない場合があります。文字列を削除するには、trim、rtrim、ltrim およびその他の関数、を使用できます。それぞれ、両端にスペース、文字列の最後に 1 つのスペース、文字列の先頭に 1 つのスペースです。
echo trim(
「i love iwind」
);
// は「i love iwind」を取得します echo rtrim( "私はウィンドが大好きです「」 );
// "i love iwind" を取得します echo ltrim(" i love iwind ");
// "i love iwind" を取得します 実際これら 3 つのパラメータは、文字列の先頭と末尾のスペースを削除するだけでなく、:echo trim(",1,2,3 など) の 2 番目のパラメータで指定された文字も削除できます。 ,4, "
, ","); // 1,2,3,4 が得られます 両端の「,」数字は切り取られます。 Chop 関数を使用している人を時々見かけますが、実際には、これは rtrim と同義の関数です。
大文字 英語の文字の場合、strtoupper、
strto lower を使用して大文字または小文字に変換できます。 echo strtoupper(「i love iwind」); // I LOVE IWIND を取得します
echo strtoupper
(
「I LOVE IWIND」) ;
// iwind を取得します 比較一般に、!=、== を使用して、2 つのオブジェクトが等しいかどうかを比較できます。これらが 2 つのオブジェクトである理由は、それらが必ずしもすべて文字列である必要はなく、整数などである場合もあります。たとえば、
$a = "ジョー";
$b) { echo 「等しくない」
} else { echo 「等しい」 }
!==; ===(
できる(等号を追加して) 比較する場合、true;
を返すには、2 つのオブジェクトの型が厳密に等しい必要があります。そうでない場合は、
==,!=
を使用すると、文字列が自動的に変換されます対応する型に変換して処理する Compare .
22 == "22"// return true 22 === "22" ; //return false
このため、私たちのプログラムでは予期せぬ「事故」がよく起こります: 0 == 「I love you」//Return true
1 ; == 「1 愛しています」;// true を返す
PHP には、文字列比較のための一連の関数もあります: strcmp
、strcasecmp、strncasecmp
()、strncmp()、前者が後者より大きい場合はすべて 0 より大きい整数を返します 、; 前者が後者より小さい場合は 0 より小さい整数を返します。 than 0; if 2 つが等しい場合、0
が返されます。 それらの比較の原則は他の言語のルールと同じです。 strcmp は、大文字と小文字を区別する文字列比較です(、つまり大文字と小文字を区別する): echo strcmp("abcdd", ) 「ABCDE」 );
// "b" と "B" を比較して 1 (>0) を返します strcasecmp は大文字と小文字を区別しない文字列比較に使用されます: echo
strcasecmp ("abcdd ", "aBcde"); // "d" と "e" を比較して、-1 (<0) を返します
strncmp は比較に使用されます 文字列の一部、比較を開始します3 番目のパラメーターは比較する長さです:
echo
strncmp("abcdd", "aBcde", 3);
// abc と aBc を比較して 1 (>0) を返します
strncasecmp は、文字列の先頭から開始して、大文字と小文字を区別しない方法で文字列の一部を比較するために使用されます。3 番目のパラメータは長さです比較対象: echo strncasecmp("abcdd", "aBcde", 3); abc と aB と比較して 0 を返します。 c、ケースではないためセンシティブなので、どちらも同じです。
単純に文字列のサイズを比較するだけでは所定の要件を満たせない場合もあります。たとえば、通常 10.gif は 5.gif よりも大きくなりますが、上記の関数を適用すると - が返されます。 1, は、10.gif が 5 より優れていることを意味します。gif, この状況に対応して、PHP は 2 つの自然に対照的な関数 strnatcmp、strnatcasecmp: を提供します。
エコーstrnatcmp("10.gif", "5.gif"); // Return 1 (>0)
echo strnatcasecmp ( "10.GIF", "5.gif"); // Return 1 (>0)
Replacement 置換の意味は、文字列の一部を変更して、新しい要件を満たす新しい文字列。 PHPでは、str_replace
(「置換する内容」、「元の内容を置換する文字列」、「元の文字列」)を使って置換するのが一般的です。 。
echo str_replace("iwind", "kiki", "iwindが好き、iwindが言った") // を出力します。キキが大好きです, kiki発言「は、元の文字列の
"iwind"をすべて"kiki"に置き換えようとしています。str_replaceは大文字と小文字が区別されるため、それを使用することは想像できません. str_replace
("IWIND", "kiki",...)元の文字列の"iwind".を置き換える str_replaceも実装可能複数のペア1. 多対多の置換は可能ですが、1 対多の置換は実現できません:
echo
str_replace(array("iwind", "kiki"), "people ", "i love kiki, iwind saw"); は、最初のパラメータで i love people
,
people thoughtarray(
"iwind) を出力します"、"kiki")は"people" echo
str_replace(array("iwind", 「キキ」 )、array(「優しい男性」、「レディース」)、「私はキキが好き、とiwindは言いました」);输出 i love ladies, gentle man said 。也就是说第一个数组中的元素被第二个数组中的相对应的元素替换掉了,如果有一个数组比另一个数组元素数要少,那么不足的都会当作空来处理。
与此有些类似的是strtr,用法请参阅手册.
此外,PHP还提供了substr_replace,实现替换一部分的字符串。语法如下:
substr_replace (原字符串, 要替代的字符串, 开始替换的位置 [, 替换的长度])
其中,开始替换的位置从0开始计算,应该小于原字符串的长度。要替换的长度是可选的。
echo substr_replace("abcdefgh", "DEF", 3); // 将输出 "abcDEF"
echo substr_replace("abcdefgh", "DEF", 3, 2); // 将输出 "abcDEFfgh"
第一个例子中,从第三个位置(即"d")开始替换,从而把 "defgh"都替换成了“DEF”
第二个例子中,也是从第三个位置(即"d")开始替换,但只能替换2个长度,即到e,所以就把"de"替换成了"DEF".
PHP还提供了preg_replace,preg_replace_callback,ereg_replace,eregi_replace等函数应用正则表达式来完成字符串替换,用法请参考手册。
検索と一致
PHP には、検索、一致、または位置決めのための関数が多数あり、それらはすべて異なる意味を持っています。ここではよく使われるstrstr、stristrについてのみ説明します。後者と前者の関数は同じで、戻り値も同じですが、大文字と小文字は区別されません。
strstr("親文字列", "部分文字列")は、親文字列、内で部分文字列が最初に現れる位置を見つけるために使用され、その部分を返します。部分文字列の先頭から親文字列の末尾までの親文字列。たとえば、
echo strstr("abcdefg", "e"); 部分文字列が見つからない場合は、"efg" が出力されます。ヌル。これは、文字列に別の文字列が含まれているかどうかを判断するために使用できるためです。 strstr
($str
, $needle)) {
echo 「iwind があります」 } else { E cho
「iwind はありません」 "; } は、iwind"を含むを出力します"
HTML関連
1,htmlspecialchars
(
$string)
これです最も簡単な使用法は、(名前が示すように) 文字列内のいくつかの特殊文字
&,',"<,> を対応する HTML エンティティ形式に変換することです: $str = "i love kiki、iwind は言いました。";
echo htmlspecialchars($str);
出力します私は kiki が大好きです、iwind は言いました
2,htmlentities($string)エンティティ形式に変換できる文字をすべてエンティティ形式に変換します 3,html_entity_decode($string);PHP4.3.0以降に追加された、htmlentities($string)の逆です。関数: 4,nl2br($string) 文字列内のすべての改行文字を
+ 改行文字に変換します。 例: $str = "i love kiki,n iwind saw."; nl2br($str); は i love kiki,
iwind と述べました。
最も一般的に使用される暗号化文字列は md5 で、文字列を長い 32 の echo md5("i love iwind"); // "2df89f86e194e66dc54b30c7c464c21c" を出力します PHP5 は、16 ビット暗号化文字列を出力できるように、md5 に 2 番目のパラメーターを追加します。 .
この時点で、文字列操作に関するこの入門チュートリアルは次のとおりです。以上ですが、特に PHP5 には多くの新機能が追加されているため、上記は氷山の一角にすぎません。そのため、引き続き学習する必要があります。そうして初めて、優れたアプリケーションが可能になります。