2013-01-02 64 views
1

因此,我已經查看了幾篇關於array_merge和array_unique的文章,但沒有看到任何完全像我想要做的事情。我假設解決方案是這樣的:PHP - Merge-down multidimensional arrays by named key,除了我使用的是字符串,而且我還要結束重複鍵,我認爲它不會起作用。根據值在數組中組合字段

我有一個數組($ classagg),我用它來創建一個網頁,詳細說明事件的類。目前我正在使用的代碼是:

usort($classagg, function($a, $b) { 
return strcmp($a['title'], $b['title']); 
}); 

foreach($classagg as $out){ 
print " 
<p> 
<a class=\"education-class-list-title\" name=\"$out[presenter]\">$out[title]</a><br /> 
<span class=\"education-class-list-description\">$out[description]</span><br /> 
<span class=\"education-class-list-presenter\"> Presented by: <a   href=\"/event/$out[eventType]/$out[eid]?qt-event=3#$out[presenter]\">$out[presenter]</a>  </span> 
</p> 
"; 
} 

一切運作良好,但我有一些類,其中兩個主持人都呈現相同的類。系統設置爲CRM,所以很遺憾,我無法爲這兩位演示者組建一個組合應用程序。

當前陣列的簡化版本可能會喜歡:

Array 
(
    [0] => Array 
     (
      [title] => Class 1 
      [description] => This is a Class 
      [presenter] => John 
     ) 

    [1] => Array 
     (
      [title] => Class 2 
      [description] => This is a another class 
      [presenter] => Sue 
     ) 

    [2] => Array 
     (
      [title] => Class 1 
      [description] => Sally is presenting with John 
      [presenter] => Sally 
     ) 


) 

我要合併陣列0和2,保持標題,保持描述中的一個(優選的較長的一個),並保持二者的名字。

我非常感謝任何幫助。

回答

0
$newArray = array(); 

foreach($array as $class) { 
    if(isset($newArray[$class['title']])) { 
    $presenters = explode(', ', $newArray[$class['title']]['presenter']); 
    $presenters[] = $class['presenter']; 
    $newArray[$class['title']]['presenter'] = implode(', ', $presenters); 

    $e = $newArray[$class['title']]['description']; 
    $n = $class['description']; 
    $newArray[$class['title']]['description'] = (strlen($n) > strlen($e) ? $n : $e); 
    } 
    else { 
    $newArray[$class['title']] = $class; 
    } 
} 
+0

在if行中增加了一個括號後,它的工作方式非常好。謝謝你一堆 – orion4567

+0

你不會相信我每天會想念多少次parens ......現在編輯:-) –