PHPでは、 rsort()関数は通常、配列を下降順にソートするために使用されますが、デフォルトでは配列要素の値によってソートされます。文字列の長さで配列を並べ替えたい場合、 rsort()はこの要件を直接実装できません。配列を文字列の長さで並べ替えるには、 USORT()とカスタム比較関数を使用するか、ソートして処理する前に文字列の長さを計算できます。
この記事では、 rsort()を使用して文字列長で配列を並べ替える方法を紹介し、コードの例と説明を示します。
最初に理解することは、 rsort()を文字列の長さに基づいて直接ソートすることができず、配列要素の値に基づいてソートされることです。したがって、文字列の長さでソートを達成するには、 usort()を使用する必要があります。
ただし、 USORT()自体は、配列の昇順をソートします。比較関数をカスタマイズすることができます。これは、文字列の長さに応じて比較して、長さごとにソートを達成します。また、 rsort()と同様の効果を達成するために下降するように選別方法を設定することもできます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// アレイの例</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">"apple"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"kiwi"</span></span><span>, </span><span><span class="hljs-string">"grapes"</span></span><span>, </span><span><span class="hljs-string">"strawberry"</span></span><span>];
</span><span><span class="hljs-comment">// カスタム比較関数,文字列の長さでソートします</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compareByLength</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$b</span></span><span>) - </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>); </span><span><span class="hljs-comment">// 降順で並べ替えます</span></span><span>
}
</span><span><span class="hljs-comment">// 使用 usort 和カスタム比較関数排序</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-string">'compareByLength'</span></span><span>);
</span><span><span class="hljs-comment">// 出力ソート付き配列</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>配列の定義:最初に、異なる長さの文字列を含む異なるフルーツ名を含む配列$配列を定義します。
カスタム比較関数: CompartbyLength()は、2つの文字列の長さを比較するために使用されるカスタム比較関数です。ここでは、Strlen($ b)-Strlen($ a)を使用して、長さの降順の順序を達成します。 strlen()関数は、文字列の長さを返します。 $ bと$ aは、それぞれ比較する2つの文字列です。返品値が正の数である場合、 $ Bの長さが$ Aよりも大きく、逆も同様です。
ソート配列: USORT()関数は配列のソートに使用され、順序付けルールは、渡した比較関数によって決定されます。
出力ソート結果:最後に、 print_r()を使用してソートされた配列を出力すると、結果は長い弦の長さで長く配置されます。
上記のコードを実行した後、出力は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => strawberry
[</span><span><span class="hljs-number">1</span></span><span>] => banana
[</span><span><span class="hljs-number">2</span></span><span>] => grapes
[</span><span><span class="hljs-number">3</span></span><span>] => apple
[</span><span><span class="hljs-number">4</span></span><span>] => kiwi
)
</span></span>ご覧のとおり、長い長さの要素がその前にあります。
rsort()自体は文字列の長さで直接ソートすることはできませんが、カスタム比較関数とusort()によってこの要件を達成できます。アレイを長さで並べ替えるために、関数のstrlen()を比較して、文字列の長さを計算します。この方法は、 rsort()の降順順序を維持するだけでなく、ニーズに応じて配列要素を柔軟に並べ替えます。
この方法が、PHPの配列をよりよく操作できるようにすることを願っています!