2011-07-10 4 views
-1

私のウェブサイトの各メンバーをループし、特定の変数(この場合は$ durationです)を取得できるコードがあります。最小値のうち10個を含むループを終了しようとしています

私がしようとしているのは、最も低い数字がである人を見つけ、それを順序付けられた配列またはリストに入れてから、10とechoをループします。ユースケースとして

、のは、100人のうち、そのふりを聞かせて、10人は... 期間 10、20、30、40、などを持っている、と私たちは、他の90人のメンバーが期間どこかを持っているふり101〜1000の間。各部材を介してIループとして

、Iはそのメンバの期間値Iが既にいくつかの容器(配列?)であり、終わりにechoことができるように10のいずれか未満であるかどうかを確認します10を最低から最高まで

+0

並び替え期間ですべてのメンバーのリストと、最初の10を反復処理します。 –

+1

このデータはデータベース内にありますか(MySQLなど)?そうであれば、データをデータベースクエリの一部として注文することはできませんか? –

+0

どこからデータを取得しますか?何らかの種類のデータベースを使用している場合は、PHPを使用してすべてのメンバーを取得してループするのではなく、別のクエリを書く方が簡単で簡単です。 –

答えて

0

とにかくすべての値をループする必要があるので、すべての値を配列に追加してからsortメソッドを使用し、最初の10個の項目(0-9)を使用します。ここでは、このメソッドを使用する方法を正確にドキュメントは次のとおりです。

http://www.php.net/manual/en/function.sort.php

このソリューションの利点は、キー0が最低値と一致するように、それは値をオーダーし直すということです。

新しい値を見つけるたびに(新しい値を挿入して最高の値をドロップする)ソートを試みることができます。これにより、アレイのメモリ容量は節約されますが、各値を比較する際に処理能力が低下します。最適化しても、おそらく十分ではありません。

本当にすべてのアイテムを配列に入れたくない場合は、50個のメンバー(または使用したいマジックナンバー)の配列を作成できます。あなたは最初の50の継続時間でそれを設定し、それを並べ替えることができます。次に配列位置10-49に40個の項目を追加して、もう一度並べ替えることができます。あなたはそれを何度も何度も繰り返して、新しい期間を追加するたびに最低10項目を保持することができます。そうすれば、すべてのアイテムをソートする際のパフォーマンスヒットと、すべてのアイテムを格納するメモリヒットとのバランスをとることができます。あなたは配列のサイズを変更することでそれをダイヤルすることができます。

+0

これは私が取っている解決策です。データの収集中には、!empty()などの関数を使用して、値がまったく定義されていないユーザーの削除を開始します。これにより、並べ替えのためにそれらのユーザーを配列に追加することさえ気にすることなく、パフォーマンスが向上します。 – shadowprotocol

+0

私はこのプロジェクトを終了するためにhttp://www.the-art-of-web.com/php/sortarray/をやるつもりです。あなたのソリューションは私を助け、私がそれをやっている方法です。ありがとう! – shadowprotocol

0

あなたのウェブサイトのすべてのメンバーをハッシュで保存します。キーは継続時間で、値はプライマリキー、さらにはメンバーの詳細を含むオブジェクトです。キーに基づいてハッシュをソートするuksortに送ることができる関数を書く。逆に、トップ10

1

はcodepadでこの例を参照してください印刷:http://codepad.org/4ROaojCT

<?php 

$array = array(5, 6, 1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13); 

sort($array); 
$array = array_slice($array, 0, 10); 

print_r($array); 

結果:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 4 
    [4] => 5 
    [5] => 6 
    [6] => 7 
    [7] => 8 
    [8] => 9 
    [9] => 10 
) 
関連する問題