2012-01-27 14 views
1

これは私をナットにしています。私はmySQLから私のテーブルの行を引っ張って、それらを並べ替える必要がありますが、私はそれらを単一の配列として出力する必要があります。主にこれ以降のコードがそれを受け入れるために書かれているからです。PHP MySQL多次元配列を並べ替え

ここに私のコードです。あなたに何か提案があれば教えてください。

<?php 

include 'connect.php'; 


$query = mysql_query("SELECT * FROM users"); 

while ($data = mysql_fetch_assoc($query)) 
{ 
    $newarray[]=$data; 
    $dbusername = $data['username']; 
    $dbpassword = $data['password']; 
    $logid = $data['id']; 
    print_r ($data); 
    echo "<br/>"; 
} 

foreach ($newarray as $key => $row) { 
$volume[$key] = $row['password']; 
} 

array_multisort($volume, SORT_ASC, $newarray); 
print_r($newarray); 

?> 

これの結果は次のとおりです。

Array ( 

[0] => Array ([id] => 4 [rating] => 18 [password] => 1981 [username] => 212060064) 
[1] => Array ([id] => 2 [rating] => 6 [password] => 1983 [username] => 212060062) 
[2] => Array ([id] => 3 [rating] => 5 [password] => 1984 [username] => 212060063) 
[3] => Array ([id] => 1 [rating] => 3 [password] => 1988 [username] => 212060061) 

) 

私はこのような出力にそれらを必要とするしかし:

Array ([id] => 4 [rating] => 18 [password] => 1981 [username] => 212060064) 
Array ([id] => 2 [rating] => 6 [password] => 1983 [username] => 212060062) 
Array ([id] => 3 [rating] => 5 [password] => 1984 [username] => 212060063) 
Array ([id] => 1 [rating] => 3 [password] => 1988 [username] => 212060061) 
+1

? ID?ユーザー名? – Josh

+0

必要な出力はリストのように見えますが、得られる出力はリストの特定の表現です(出力している出力をループすることができます)。結果を使用するコードはどのように見えますか? – mqsoh

+0

個別に格納する場合は、各配列の変数を作成するだけではありません。 4つの配列を一緒に保存したい場合は、それらを別の配列またはオブジェクトに格納する必要があります...残念なことに、残りのコードの外観はどうですか? –

答えて

2

を$されます。

これの結果は次のとおりです。

Array ( 

[0] => Array ([id] => 4 [rating] => 18 [password] => 1981 [username] => 212060064) 
[1] => Array ([id] => 2 [rating] => 6 [password] => 1983 [username] => 212060062) 
[2] => Array ([id] => 3 [rating] => 5 [password] => 1984 [username] => 212060063) 
[3] => Array ([id] => 1 [rating] => 3 [password] => 1988 [username] => 212060061) 

) 

しかし、私は次のように出力する必要があります:

Array ([id] => 4 [rating] => 18 [password] => 1981 [username] => 212060064) 
Array ([id] => 2 [rating] => 6 [password] => 1983 [username] => 212060062) 
Array ([id] => 3 [rating] => 5 [password] => 1984 [username] => 212060063) 
Array ([id] => 1 [rating] => 3 [password] => 1988 [username] => 212060061) 

SORTの方法で違いはありません。あなたの最後のコード行で

、交換してください:

print_r($newarray); 

をによって:

評価順
foreach($newarray as $child_array) 
{ 
    print_r($child_array); 
} 
2

最も簡単な方法は、おそらくSQLで直接それらをソートするために、次のようになります。

SELECT * FROM users ORDER BY id 

私は個人的に試してみますo array_multisortを使用するのは難しいので、できるだけ多くのことをする必要はありません。 _multisortの方が、usortよりも簡単で、データベースレイヤーがそれを処理できるようにするのは、まだ問題がありません。

+0

+1 array_multisort()!私はそれがusortソリューションより効率的であることがあることを知っていますが、最も単純な配列を除いて、array_multisort()は、この強力な関数の不思議な結果に対してあなたの頭を打ち負かすだけです。また、一般的に一歩一歩でかなり大きな論理的なリードを演出しているので、コードは読みにくいことがよくあります。 –

+0

私は知っていますが、データはすでに4つの異なるファイルからダンプされています。私のファイルは実際にはクエリを含んでいません。 $ row変数のみ。アイデアは、私は非常に多くのクエリを持っていると私はサーバー上のストレスを解放しようとしています。 – user1170117

0

別々の配列が必要ですか?このコードは、単一のアレイを作成します。

include 'connect.php'; 
$query = mysql_query("SELECT * FROM users"); 
$x = 0; 
while($data = mysql_fetch_assoc($query)){ 
    $variable_name = 'record'.$x; 
    $$variable_name = $data; 
    $x++; 
} 
print_r($record0); 
print_r($record1); 
//etc... 

最初の実行をダブル$$は、あなたのスピーチによるrecord0

関連する問題