スレッド表示 | フラット表示〕 全トピック 920 件中 48 番目 次≫ ≪前

数字の並び替え

created: 2008-06-21 22:48 | modified: 2008-06-22 13:38 | reply: 1

[4194] 数字の並び替え

user: インディ | created: 2008-06-21 22:48
はじめまして。
phpで数字の並び替えをしてみようと思ったのですが、
なかなかうかうまくいきません。

例えば
10,20,30,40,50
とあると
10,20,50,30,40
というふう一番最後の数字を20と30の間に挿入する
というようなことがしたいです。
配列にデータを入れて

<?php
$array[] = 10;
$array[] = 20;
$array[] = 30;
$array[] = 40;
$array[] = 50;

for($i = 0; $i < count($array); $i++){
print $array[$i] . " ";
}
?>
結果
10,20,30,40,50

数字を挿入する方法があれば教えてください。
すませんがよろしくお願いします。
reply: 4195 返信 編集 削除

[4195] 配列の並べ替え案

user: ゆうじ | created: 2008-06-22 13:38
こんにちは。

# 一番最後の数字を、「20」と「30」の間に、挿入する

これがこのプログラムの要求にあたるものだと思いますので
もっと細かい要素に分解し整理し直してみてください。

1.まず『一番最後の数字』は、
  『配列の最後の要素の値』と読み替えられます。

2.『「20」と「30」の間』については、
  『値が「20」の次のインデックス』と読み替えられます。

3.『挿入する』となると挿入位置より後の要素を
  後ろにスライドさせる必要がありますね。

こうなると、配列の最後の要素は
array_pop で取り出せるとして、
『値が「20」の次のインデックス』を特定することと
挿入位置より後の要素をスライドさせることを
ループの中で行って、新しい配列を生成すれば
出来るのでないかと考えられます。

これをコードに直せばこうなります。
// $array初期化
$array = array(10, 20, 30, 40, 50);

// $arrayの最後の値で$lastNumberを初期化
// 同時に配列の要素は一つ短くなる
$lastNumber = array_pop($array);

// 新しい配列を予め用意し初期化しとく
$newArray = array();

// $arrayを走査
foreach ($array as $val) {

// 値を$newArrayに追加
$newArray[] = $val;

// 値が20だったらさらに$lastNumberを追加
if (20 == $val) {
$newArray[] = $lastNumber;
}
}

// 確認
var_dump($newArray);

こんなんでわかりますか。

配列の中に20が2個以上あった場合や全く無い場合、
10,20,25,30,40,50 のような並びの場合、
20の後ではなく30の前に挿入する必要があるのではとか・・・、
まだまだ不確定要素が多いので
もっとこのプログラムに求められてる「要求」を
理解できるところまで具体的に整理してみてください。
Parent: 4194  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 48 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑