2013-01-01 147 views
10

我有一個這樣的陣列:基於「否」作爲主鍵陣列中基於php中的鍵組數組值?

$str= 
    Array 
(
    [No] => 101 
    [Paper_id] => WE3P-1 
    [Title] => "a1" 
    [Author] => ABC 
    [Aff_list] => "University of South Florida, Tampa, United States" 
    [Abstracts] => "SLA" 

) 

Array 
(
    [No] => 101 
    [Paper_id] => WE3P-1 
    [Title] => "a2" 
    [Author] => DEF 
    [Aff_list] => "University of South Florida, Tampa, United States" 
    [Abstracts] => "SLA " 

) 

Array 
(
    [No] => 104 
    [Paper_id] => TU5A-3 
    [Title] => "a3" 
    [Author] => GHI 
    [Aff_list] => "University of Alcala, Alcala de Henares, Spain" 
    [Abstracts] => "Microwave" 

) 

欲組元素。輸出應該是這樣的:

array(6) { 
    ["No"]=> 
    string(6) "101" 
    ["Paper_id"]=> 
    string(6) "WE3P-1" 
    ["Title"]=> 
    string(80) ""a-1" 
    ["Author"]=> 
    string(14) "ABC" 
    ["Aff_list"]=> 
    string(51) ""University of South Florida, Tampa, United States"" 
    ["Abstracts"]=> 
    string(5) ""(SLA)" 
" 
} 
array(6) { 
    ["No"]=> 
    string(3) "104" 
    ["Paper_id"]=> 
    string(6) "TU5A-3" 
    ["Title"]=> 
    string(40) "a2" 
    ["Author"]=> 
    string(20) "DEF" 
    ["Aff_list"]=> 
    string(48) ""University of Alcala, Alcala de Henares, Spain"" 
    ["Abstracts"]=> 
    string(9) ""Microwave" 
" 
} 

注意作者的價值得到了關於合併到主鍵「No'.Can任何人幫我從這個好嗎?

我試着這樣做:

foreach($paper_info as $element) { 
    foreach($element as $v) { 
     $id = $element['No']; 
     if (!isset($out[$id])) { 
      out[$id] = array(
       'No'=>$element['No'], 
       'Paper_id' => $element['Paper_id'], 
       'Title' => $element['Title'], 
       'Authors' => array(), 
       'Aff_list' => $element['Aff_list'], 
       'Abstracts' => $element['Abstracts'] 
      ); 
     } 
     $out[$id]['Authors'][] = array('Authors' => $element['Author']); 
    } 
} 
+2

我們能不能有數組的print_r版本... – ravisoni

+0

什麼是你的代碼錯誤的輸出,你試過嗎?除了'out'變量缺少$ – Levi

+0

陣列 ( [No] => 101 [Paper_id] => WE3P-1 [標題] =>「用添加劑製造的電小尺寸3-D立方體天線製造」 [作者簡介] =>易卜拉欣·納瑟 [Aff_list] => 「南佛羅里達州,坦帕,美國」 [摘要] => 「SLA」 ) – Aditya

回答

32

你可以使用一個通用的功能:

function _group_by($array, $key) { 
    $return = array(); 
    foreach($array as $val) { 
     $return[$val[$key]][] = $val; 
    } 
    return $return; 
} 
+0

真棒解決方案! –

5

在你的問題中的數據格式是模棱兩可的,但假設結構$paper_info低於什麼,這應該得到你要尋找的輸出。

$paper_info = array(
    array(
     'No' => "101", 
     'Paper_id' => "WE3P-1", 
     'Title' =>"An Electrically-Small, 3-D Cube Antenna Fabricated with Additive Manufacturing", 
     'Author' => "Ibrahim Nassar", 
     ... 
    ), 
    array(
     'No' => "101", 
     ... 
     'Author' => "Thomas Weller", 
     ... 
    ) 
); 

$out = array(); 
foreach($paper_info as $paper) { 
    $id = $paper['No']; 
    if (!isset($out[$id])) { 
     $out[$id] = $paper; 
     $out[$id]['Author'] = array(); 
    } 
    $out[$id]['Author'][] = $paper['Author']; 
} 

您還應該在開發環境中打開警告和顯示錯誤。我有一種感覺,它會幫助你。在開發過程中,您可以配置您的php.ini,或者在您的php腳本的開頭插入此代碼。只要確保在推向生產之前將其刪除。

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
+0

它的意思是:警告:非法字符串偏移量'否'非法字符串偏移量'作者' – Aditya

+1

這意味着您的數據不是我所假定並在上面指定的格式。如果您在您的問題中提供了有效的代碼示例,將以適當的格式創建變量$ paper_info。 – Levi

+0

$ paper_info是一個數組數組,如'No'=> $ a(這是一個nos數組),'Paper_id'=> $ b(id數組)。類似的所有其他鍵 – Aditya