PHPでは、整数部門の一般的な慣行は、分割演算子を使用し、 floor() 、 intval()を組み合わせてcastを使用して整数結果を取得することです。ただし、このアプローチは、特にパフォーマンスとコードの読みやすさに関しては、常に最適ではありません。 IntDIV()関数は、これらの問題を解決するように設計されています。この記事では、より効率的で堅牢なPHPコードを作成するのに役立つINTDIV()の使用とその高度な手法について詳細に説明します。
intdiv()は、整数部門を実行して整数の結果を返すために、PHP 7以降に導入された組み込み関数です。基本的な構文は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$dividend</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$divisor</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>
</span></span>
従来の部門とは異なり、 intdiv()は、小数部を丸める代わりに直接廃棄します。これは、低レベルの言語での除数操作に近い動作をすることを意味します。
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>); </span><span><span class="hljs-comment">// 出力 3</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(-</span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>); </span><span><span class="hljs-comment">// 出力 -3</span></span><span>
</span></span>
これは、 intval(10/3)よりも明示的でパフォーマンスがあり、不要な浮動小数点計算も回避されます。
分割を使用してから整数に変換するのと比較して、 IntDIV()は、特に大規模なループまたはバッチデータ処理に関与する浮動小数点数のオーバーヘッドを避けて、下部で除数操作を直接実行します。
<span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-number">1000000</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
</span><span><span class="hljs-variable">$a</span></span><span> = </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-variable">$i</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>); </span><span><span class="hljs-comment">// どうやらより速く intval($i / 3)</span></span><span>
}
</span></span>
intdiv()は、 「私たちは分裂性のみを気にする」という意図を明確に表しています。コードはより読みやすく、チームワークにとって特に重要です。
intdiv()は、負の数の場合、丸めの動作(cと一致)の動作に従います。
ページングロジックを実装するときは、現在のページ数またはオフセットを計算する必要があることがよくあります。
<span><span><span class="hljs-variable">$page</span></span><span> = </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$limit</span></span><span>) + </span><span><span class="hljs-number">1</span></span><span>;
</span></span>
従来の(int)($ offset / $ limit) + 1よりも正確で読みやすい。
ビット操作シミュレーションなどの一部のアルゴリズムでは、 intdiv()は、特にシンボル処理に関しては、 >>の右シフト操作を安全に置き換えることができます。
<span><span><span class="hljs-comment">// 分割するのに相当します 2 卸売</span></span><span>
</span><span><span class="hljs-variable">$half</span></span><span> = </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>);
</span></span>
金型フェッチ操作を実行する場合、商と残りの両方が必要な場合、 intdiv()と%は自然なパートナーです。
<span><span><span class="hljs-variable">$quotient</span></span><span> = </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-variable">$chunkSize</span></span><span>);
</span><span><span class="hljs-variable">$remainder</span></span><span> = </span><span><span class="hljs-variable">$value</span></span><span> % </span><span><span class="hljs-variable">$chunkSize</span></span><span>;
</span></span>
この組み合わせは、バッチアップロード、ページングの荷重、ファイルチャンキング、その他のシナリオの処理において非常に一般的です。
intdiv()は整数パラメーターのみを受け入れ、浮動小数点数を渡すとtypeRrorが投げられます。
除数は0にすることはできません。そうしないと、 DivisionByzeroErrorがスローされます。
変数タイプについてわからない場合は、使用前にタイプチェックまたは明示的な変換を実行することをお勧めします。
intdiv()は、しばしば見落とされがちですが非常に強力な機能です。コード効率を改善するだけでなく、セマンティックの明確さも向上させます。 Performance-Critical Loopsであろうと、正確な整数部門を必要とするビジネスロジックであろうと、 intdiv()は信頼できるツールです。それをマスターすることは、あなたが上級PHP開発者に向かって移動するための重要なステップです。