2010-11-15 64 views
0

想知道是否有人可以提供幫助;在PHP中對2維數組排序

我有一個二維數組,我需要通過任何常見的「作業編號」元素進行分組; 下面是一個例子 - 我只是在玩這個想法,$ i只是一個迭代數組結果的計數器;

$galleryItems[$i][0] = 'example title';//the title 
$galleryItems[$i][1] = 'example description';//description 
$galleryItems[$i][2] = 'the client';//client 
$galleryItems[$i][3] = '00000';//job number 

關於如何分組這些toegther,例如,因此,如果有一定數量的00000工作項目將繼續堅持所有這些toegther,任何00001將組合在一起等

感謝任何想法

回答

0
$galleryItemsGrouped = array(); 
foreach($galleryItems as $k => $v) { 
    $galleryItemsGrouped[$v[3]][] = $v; 
} 
var_dump($galleryItemsGrouped); 

或者也許這就是你的意思

usort($galleryItems, function($a,$b) { 
    if($a[3] == $b[3]) return 0; 
    return $a[3]<$b[3] ? -1 : 1; 
}); 
var_dump($galleryItems); 
+0

嗨,感謝 - 第一次帶回結果分組,但我認爲第二個看起來像我之後(保持galleryitems數組的深度相同),但我得到一個意想不到的T_FUNCTION,當我嘗試並且玩弄它,歡呼 – frazzle 2010-11-15 11:37:35

+0

道歉,我認爲第一個更多的是因爲工作號碼存儲爲字符串,並且不需要按照數字順序,他們只需要將它們分組即可。如果我理解正確,第二個會按照這個數字順序列出? – frazzle 2010-11-15 11:51:19

+0

第二個將使用PHP 5.3+。在PHP 5.2中,您需要創建一個變量函數或一個回調函數,而不是傳遞匿名函數。有關示例,請參閱usort()的手冊,您應該可以重寫它。第二個也會比較字符串,但結果數據結構會有所不同。 – Mchl 2010-11-15 12:07:25

0

粘在一起,你必須使用PHP的

如果此數據來自數據庫,你可以:在$ galleryItems [$ i]

0

我想你可能不得不寫,你可以用usort()使用一個排序回調函數功能想看看在那裏使用GROUP BY子句,並省去在服務器上排序的麻煩。

在更具設計意義的層面上,可能考慮一組galleryItem對象而不是2D數組。

+0

嗨,我嘗試了group by選項,但是我發現它有點棘手,因爲我從一些wordpress插件表中拉出來,我發現我無法將我的SQL語句放入一個語句中。我可以再次看到這條路,但之前我沒有取得太多成功。 – frazzle 2010-11-15 11:53:30

0

取而代之的數量指標,使用的名稱:

$galleryItems[$i]['title'] = 'example title';//the title 
$galleryItems[$i]['description'] = 'example description';//description 
$galleryItems[$i]['client'] = 'the client';//client 
$galleryItems[$i]['job_number'] = '00000';//job number 

然後你就可以利用這個功能進行排序:

function sort_by_job_number ($a, $b) 
{ 
    if ($a['job_number'] == $b['job_number']) { 
     return 0; 
    }  

    return ($a['job_number'] > $b['job_number']) ? 1 : -1; 
} 

usort($ galleryItems, 'sort_by_job_number');