2016-05-26 138 views
1

我使用GROUP_CONCAT從MySQL獲得查詢數據:從MySQL的GROUP_CONCAT創建PHP陣列

GROUP_CONCAT('id => ',assignments.userid,', assigned => ',assignments.assigned SEPARATOR ';') as assigneeids 

,並試圖將其轉換爲PHP數組。

$assignees = explode(';', $ticket['assigneeids']); 
foreach($assignees as $assignee) { 
    echo "$assignee\n"; // $assignee['id'] outputs 'i' 
    echo gettype($assignee) . '\n'; 
} 

但不幸的是$assignee變成了一個字符串而不是數組。輸出:

id => 1001, assigned => 1419648601 
string 
id => 1002, assigned => 1419649207 
string 

我在做什麼錯?

+0

您是否試圖從生成SQL查詢的PHP代碼,並期待它作爲評價PHP?如果沒有'eval()',這將無法工作,但這不是解決這個問題的方法。你能否澄清一下,你的目標是生成包含子數組''array('id'=> 1234,'assigned'=> 987654)''的二維結構的數組? –

+0

是的,這是我的目標。 –

+0

你可以發佈源表的示例嗎?你可能只需要一個更簡單的查詢,只需要一個正常的讀取循環,但是需要一點數組操作。這是GROUP_CONCAT()更大的查詢的一部分,還是它是查詢返回的唯一東西? –

回答

2

您將它連接成一個字符串,而不是一個數組。你會不會比這樣做更好?

GROUP_CONCAT(assignments.userid,'_',assignments.assigned SEPARATOR ';') as assigneeids 

一旦牽強,你需要做一些explode()「荷蘭國際集團魔法

$assignees = explode(';', $ticket['assigneeids']); 
foreach($assignees as $assignee) { 
    list($id, $assigned) = explode("_", $assignee); 
    echo "$id\n"; 
    echo gettype($assigned) . '\n'; 
} 

Example/Demo

+0

這工作得很好,但是這不是一個有點骯髒的解決方法? =) –

+0

@AlexG哈哈不完全(*只有一點*),因爲你已經在那條路上了!既然你想創建一個數組,你會在執行'eval()'時造成更多的傷害。讓PHP做你的努力工作! ; P – Darren

+1

我剛剛學到了一些新東西。我沒有意識到你可以在'GROUP_CONCAT'中放置多個表達式。我總是寫'GROUP_CONCAT(CONCAT(x,y,z))' – Barmar