PHPプログラミングでは、特にURL、名前空間、ファイルパスなどの特定のプレフィックスを備えたシナリオでは、文字列比較操作を処理する必要があります。 strncmp()関数は、2つの文字列が最初のn文字で同じかどうかを比較するために使用できる効率的なツールです。この記事では、Strncmp()を使用して、2つの配列の対応する文字列のプレフィックスが一致するかどうかを判断する方法を詳細に説明します。
strncmp()は、2つの文字列のプレフィックス部分を文字の数で比較するPHPの組み込み関数です。基本的な構文は次のとおりです。
<span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string1</span></span><span> , </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string2</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span> )
</span></span>
$ string1および$ string2は、比較する2つの文字列です。
$の長さは、比較する文字の数です(最初から始まります)。
返品値は次のとおりです。
0は、プレフィックスが同じであることを意味します。
0未満は、$ string1のプレフィックスが辞書順序で$ string2未満であることを意味します。
0を超える接頭辞は、$ string1が辞書順序で$ string2を超えることを意味します。
文字列のセットを含む2つの配列があり、これら2つのアレイの各ペアの文字列のプレフィックス(指定値の長さ)が同じかどうかを判断する必要があるとします。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-string">'apple123'</span></span><span>, </span><span><span class="hljs-string">'banana456'</span></span><span>, </span><span><span class="hljs-string">'cherry789'</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-string">'appleXYZ'</span></span><span>, </span><span><span class="hljs-string">'bananaABC'</span></span><span>, </span><span><span class="hljs-string">'cheese000'</span></span><span>];
</span><span><span class="hljs-variable">$prefixLength</span></span><span> = </span><span><span class="hljs-number">5</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array1</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$index</span></span><span> => </span><span><span class="hljs-variable">$str1</span></span><span>) {
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-variable">$array2</span></span><span>[</span><span><span class="hljs-variable">$index</span></span><span>] ?? </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-variable">$prefixLength</span></span><span>) === </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-variable">$result</span></span><span>[] = </span><span><span class="hljs-string">"第 "</span></span><span> . (</span><span><span class="hljs-variable">$index</span></span><span> + </span><span><span class="hljs-number">1</span></span><span>) . </span><span><span class="hljs-string">" 右:プレフィックスマッチング"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$result</span></span><span>[] = </span><span><span class="hljs-string">"第 "</span></span><span> . (</span><span><span class="hljs-variable">$index</span></span><span> + </span><span><span class="hljs-number">1</span></span><span>) . </span><span><span class="hljs-string">" 右:プレフィックスの不一致"</span></span><span>;
}
}
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$line</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$line</span></span><span> . PHP_EOL;
}
</span></span>
<span><span>第 1 右:プレフィックスマッチング
第 2 右:プレフィックスマッチング
第 3 右:プレフィックスの不一致
</span></span>
ハンドルアレイの長さの一貫性のない状況:上記の例は使用しますか?? ''アレイアウトバウンドエラーを回避するため。実際のニーズに応じて、より厳格な配列長チェックを行うことができます。
プレフィックスの長さの決定:適切な$の長さを選択することは非常に重要です。比較長が実際の文字列の長さを超えた場合、エラーは報告されませんが、比較結果が不正確につながる可能性があります。
ケースを無視する:比較のためにケースを無視する場合は、 strtolower()またはstrtoupper()を使用して文字列を均一に処理できます。
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>), </span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$str2</span></span><span>), </span><span><span class="hljs-variable">$prefixLength</span></span><span>) === </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-comment">// 忽略大小写プレフィックスマッチング</span></span><span>
}
</span></span>
STRNCMP()関数を介して、PHP開発者は、2つの文字列のプレフィックスが一貫しているかどうかを簡単に比較できます。これは、パスマッチング、キーワード抽出、分類認識などのシナリオの処理に特に適しています。アレイ操作で使用されると、その有用性をよりよく反映できます。この関数をマスターすると、文字列処理の効率と精度が向上します。