2011-04-03 59 views
0

這裏是我的數據的簡化版本。這是使用連接的查詢的結果,並且產生這樣的數據:合併除了一個值以外的對象數組的副本... php/mysql

id  name   picture 
1  Foo   picture_001.jpg 
1  Foo   picture_002.jpg 
2  Bar   another_image.jpg 
3  Baz   some_picture_001.jpg 
3  Baz   some_picture_002.jpg 

的輸出是對象的數組,它看起來像這樣(最小化,以只顯示ID 1的數據):

print_r($my_data); // produces: 

Array 
(
    [0] => stdClass Object 
    (
     [id] => 1 
     [name] => Foo 
     [picture] = picture_001.jpg 
    ) 

    [1] => stdClass Object 
    (
     [id] => 1 
     [name] => Foo 
     [picture] = picture_002.jpg 
    ) 
) 

此數組可能包含多個對象,其中包含不同的ID,名稱和圖片。

我想通過每個對象循環並輸出數據。這是我這樣做:

foreach($object as $item) 
{ 
    echo $item->id; 
} 

這樣做的工作,但如預期的那樣,由於連接產生重複的數據。

我已經搜索了一個解決方案,但我無法弄清楚如何防止這種重複發生。

在數據我上面傾倒,我希望可以將輸出爲:

ID 1 
Name: Foo 
Pictures in Foo: 
    picture_001.jpg 
    picture_002.jpg 

ID 2 
Name:Bar 
Pictures in Bar 
    another_image.jpg 

所以如果一個項目具有多張圖片,它被組合在一起。

我可以提供SQL,並可能改變數據的輸出方式,但我希望先看看這個方法,以及如何去做。

在此先感謝。

回答

1
$my_parsed_data = array(); 
foreach($mydata as $data){ 
    $my_parsed_data[$data->id]["id"] = $data->id; 
    $my_parsed_data[$data->id]["name"] = $data->name; 
    $my_parsed_data[$data->id]["photos"][] = $data->picture; 
} 

這個解決方案會給你一個簡單的數組你想要的格式信息...如果你想要一個對象數組,那麼你將不得不創建一個模擬此代碼的類,如下所示:

class ArrayList{ 
    private elements = array(); 

    public function addElement(){ 
     //some magic here =) 
    } 

} 
+0

接受這個,因爲它回答我的問題,並顯示排序對象/數組背後的邏輯,即使bensiu的解決方案看起來更優雅,謝謝 – alex 2011-04-03 20:39:16

1

GROUP_CONCAT應該是您的解決方案:

SELECT id, name, 
     GROUP_CONCAT(picture ORDER BY picture SEPARATOR '<br/'>) as pictures 
FROM your_table 
GROUP BY id, name 

這將需要一些上場與它讓你格式化,但它可能是這樣

+0

哇,這比我期待的要容易得多..!似乎很好地工作,謝謝。 – alex 2011-04-03 19:45:10

相關問題