人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

php 数字の並び替えについて

複数桁の数値を、数の小さい順に並び替える、お勧めの方法を教えて下さい。

例 : 42315 → 12345
例 : 84519 → 14589

宜しくお願いします。

●質問者: worldtravel
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● soqans
●100ポイント ベストアンサー

第一感がtezcelloさんと同じだったのでサンプルを書いてみました。
5桁の整数を生成する処理はphp7で使用できるrandom_intを使っていますがそのほかはphp5以上であれば使用可能です。

//対象の数を生成
$num_target = random_int(0,99999);
print $num_target;

//生成された数を一桁ごとに文字(文字列)として分割
$num_array = str_split($num_target);

//対象を数としてソート
sort($num_array,SORT_NUMERIC);

//ソートされた配列を文字列として結合後整数に変換
$num_result = (int)implode($num_array);
print " " . $num_result . "\n";

なお数値中に0が入っていたときに並び替えた結果がどうなっていてほしいのか、によって最後の処理が微妙に異なります。たとえば56040という数値が与えられたときに表示される結果が

とするのがよいと思われます。


soqansさんのコメント
ちなみにphp以外の言語で文字の処理が不得意な言語では +各桁ごとに数をカウント +0方向から数値を連結 という古典的な方法をとることもあります。もしphpで書くなら >|| $num_target = random_int(0,99999); print $num_target; while($num_target != 0){ $index = $num_target % 10; $count[$index]++; $num_target /= 10; } $num_result = 0; for($index = 1;$index <= 9;$index++){ if(isset($count[$index])){ while($count[$index] > 0){ $num_result *= 10; $num_result += $index; $count[$index]--; } } } print " " . $num_result . "\n"; ||< となります。 が、こちらの方法だとphpでは回答で示した方法よりかなり遅いので参考程度にしてください。

worldtravelさんのコメント
ありがとうございます。 とても参考になります。 使うとしましたら、こちらを使う予定です。 00456となる、だと$num_result = implode($num_array);
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ