2017-08-09 6 views
1

によってあなたはそれらのサイズによって文字列の配列を注文するために、この操作を行うことができます。私はサイズではなく、2場合は文字列の配列を注文するにはどうすればよい長によるPHP順配列して、PHPでインデックス

usort($parts, function($a, $b) { 
    return strlen($b) - strlen($a); 
}); 

文字列は同じサイズで、元の配列のインデックスで並べ替えます。

例:

I a o delicious cake

は次のようになります。

delicious cake I a o

瞬間に私の現在のコードと、それは次のようになります。

delicious cake o a i

+0

は、以下の私の答えを確認してください。 @BarneyChambers –

答えて

3

ソート配列にこのメソッドを使用してください。長さでソートするため

<?php 
$parts = "I a o delicious cake"; 
$parts = explode(" ",$parts); 
array_multisort(array_map('strlen', $parts),SORT_DESC, $parts); // this is for DESC order 
//array_multisort(array_map('strlen', $parts),SORT_ASC, $parts); // you can use this for ASC order 
echo "<pre>"; 
print_r($parts); //return like this "delicious cake I a o" 
?> 
+0

ニースとエレガント、ありがとう –

+0

PHPで7/oを確認するhttps:/ /3v4l.org/Ga1Pj –

+0

ちょうどいくつかのテストをしましたが、実際にこのコードは正しい出力を生成しません。 –

-1

usortの代わりにuasortを使用することができます。ドキュメントから

uasort - ソートユーザ定義の比較関数で配列及び インデックスの関連付けを維持する

正常usort関数は行わない。

2人のメンバーが等しいと比較される場合、それらの相対的な順序i nソートされた 配列は未定義です。

+0

申し訳ありませんxander私はこれが動作するとは思わない、私は長さで並べ替える必要があります配列インデックス –

0

、あなたは

<?php 

$str="I love to code"; 
$parts=explode(" ", $str); 

$keys = array_keys($parts); 
$values = array_values($parts); 

array_multisort(array_map('strlen', $values), SORT_ASC, $keys, SORT_ASC, $parts); 

$new_str = implode(" ", $parts); 
echo $new_str; 

デモ以下のようなarray_multisortを使用することができますインデックス:https://3v4l.org/BJ1Cl

関連する問題