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

並び替え

created: 2005-09-27 14:31 | modified: 2005-09-27 18:33 | reply: 9

[2570] 並び替え

user: らいと | created: 2005-09-27 14:31
$line[1] = "岡村 176 68 30";
$line[2] = "田中 168 58 27";
$line[3] = "増田 172 63 32";
  ・
  ・
  ・
というデータがあります。
このデータの最後の値(30,27,32)を基準に値の大きい順に並べ変えたいのですがどうしたらよいでしょうか?

簡単な質問かも知れませんが宜しくお願いします。
reply: 2571 返信 編集 削除

[2571] Re: 並び替え

user: ぱぴよん | created: 2005-09-27 14:50
らいとさん、こんにちは。

過去記事にご参考になりそうなものがありましたので、掲載致します。

http://www.sound-uz.jp/php/bbs/thread/2492?view=flat

http://www.sound-uz.jp/php/bbs/thread/2500?view=flat
Parent: 2570  reply: 2573 返信 編集 削除

[2573] Re: 並び替え

user: ach | created: 2005-09-27 16:42
usortを使わずにやると
//最後の行のデータを抜き出した配列の作成
$mapedLine =
array_map(
create_function('$str','return (int)substr($str,strrpos($str," ")+1);')
,$line);

//$mapedLine(最後の行のデータ)でソートされたキーを取得
asort($mapedLine);
$sortedKey = array_keys($mapedLine);
unset($mapedLine);

//ソートされた配列を作る
$size = count($sortedKey);
$sortedLine = array();
for ($i=0;$i<$size;$i++)
{
$sortedLine[$i] =& $line[$sortedKey[$i]];
}
unset($line,$sortedKey);
こんな感じ。多分usortを使う場合より早いけど、メモリーはその分食うと思う。
あと、実用としては最後の“ソートされた配列を作る”の部分は要らないかな。
Parent: 2571  reply: 2575 返信 編集 削除

[2575] 上手くいきません

user: らいと | created: 2005-09-27 17:27
ぱぴよんさん>
achさん>

レスありがとうございます。
過去ログは見たのですがちょっと違う気がしました。

それでachさんに教えてもらったやつを試したのですがエラーがでます。
プログラム文章(注釈・空白除くの意味)でいうと1行目と2行目3行目でエラーが出ています。
僕の環境では利用出来ないということでしょうか?

宜しくお願いします。
Parent: 2573  reply: 2579 2581 返信 編集 削除

[2579] ごめんなさい

user: ach | created: 2005-09-27 17:52
create_functionのところが適当なのでうまいことやるかふつうに関数を作ってやってみてください。
http://jp.php.net/manual/ja/function.array-map.php

後できればエラーメッセージは直接貼り付けてくれると対処しやすいです。
Parent: 2575  reply: 2580 返信 編集 削除

[2580] 考えたけどわかりませんでした。。。

user: らいと | created: 2005-09-27 17:56
achさん>
Warning: array_map(): Argument #2 should be an array in ・・・
Warning: asort() expects parameter 1 to be array, null given in ・・・
Warning: array_keys(): The first argument should be an array in ・・・

こんなエラーが出ています。
自分で上手い事関数を作らなければいけないのですね・・・・。

頑張ってみます。
Parent: 2579  reply: 2583 返信 編集 削除

[2583] なるほど

user: ach | created: 2005-09-27 18:13
Warning: array_map(): Argument #2 should be an array
訳>array_mapの第二変数は配列でなければなりません。

つまり$lineが配列でないという意味です。
ためしに
<?php
$line = array();
$line[1] = "岡村 176 68 30";
$line[2] = "田中 168 58 27";
$line[3] = "増田 172 63 32";

/* 記事2573のコード */

var_dump($sortedLine);
?>
だけでテストしてみてください。
私の環境では動きました。
Parent: 2580  reply: 2584 返信 編集 削除

[2584] ありがとうございました。

user: らいと | created: 2005-09-27 18:33
achさん>

$line = array();を入れないといけないとは・・・

知らなかったです。

上手くいきそうです。
テストプログラムで上手くいったので組み込んでみたいと思います。

貴重な時間をありがとうございました。
本当に助かりました。
Parent: 2583  返信 編集 削除

[2581] Re: 違いますか^^;

user: ぱぴよん | created: 2005-09-27 18:06
> 過去ログは見たのですがちょっと違う気がしました。

ゆうじ様が作成されたソートのクラスTwoSortを使用したサンプルを作成しました。
【クラス:http://www.sound-uz.jp/php/bbs/thread/2495?view=flat

  $line[0] = "岡村 176 68 30";
$line[1] = "田中 168 58 27";
$line[2] = "増田 172 63 32";

// TwoSortに対応させるため、2次元配列とする
foreach($line as $key => $value) $line[$key] = explode(" ", $value);

// 降順とする
$obj = new TwoSort($line);
$obj->keysort(3, true);
print "<pre>";
var_dump($line);
print "</pre>";

という風に$lineを2次元配列として応用すればできます^^;
Parent: 2575  reply: 2582 返信 編集 削除

[2582] すいません・・・

user: らいと | created: 2005-09-27 18:12
ぱぴよんさん>
違う気がしたってのはちょっと違います。
「意味がわからなかった」と言うべきでした。
スイマセン。見栄張りました。
ペコm(_ _;m)三(m;_ _)mペコ

まるっきりの初心者なもので・・・(^▽^;)
試してみます!
Parent: 2581  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 364 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

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