2012-01-27 109 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 2012-01-27 22:33:52

+0

你需要的輸出看起來像一個列表,但是你得到的輸出是一個列表的特定表示(你可以遍歷你得到的輸出)。使用結果的代碼是什麼樣的? – mqsoh 2012-01-27 22:37:46

+0

如果你想單獨存儲它們,而不是僅僅爲每個數組創建一個變量。如果你想將4個數組一起存儲,你必須將它們存儲在另一個數組中,或者存儲在一個對象中......我很高興,代碼的其餘部分如何。 – 2012-01-27 22:40:38

回答

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 

我個人嘗試t o儘可能避免與array_multisort糾纏,因爲它很難處理。我還沒有看到一個問題,它比usort更容易_multisort或讓數據庫層處理它。

+0

+1 for spurning array_multisort()!我知道它有時比usort解決方案更有效率,但除了最簡單的array_multisort()之外,其他所有的array_multisort()都會讓你的生活更加艱難,因爲你對這個功能強大的函數的神祕結果嗤之以鼻。而且代碼的可讀性通常較差,因爲它通常會一次性執行相當大的邏輯引導。 – 2012-01-27 22:45:08

+0

我知道,但是數據已經從4個不同的文件中刪除。我的文件實際上並不包含查詢。只有$行變量。這個想法是,我有這麼多的查詢,我試圖釋放服務器上的壓力。 – user1170117 2012-01-28 00:46:00

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