2013-01-01 10 views
10

Mam tablicę takiego:Wartości tablic grupy na podstawie klucza w 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" 

) 

Chcę elementów grupowych w tablicy opartej na „nie” jako klucz podstawowy. Wyjście powinno wyglądać tak:

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" 
" 
} 

Zauważ, że wartość autor ma połączyła w odniesieniu do klucza podstawowego „No'.Can ktoś mi pomóc z tym proszę?

Próbowałem w ten sposób:

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

Czy mamy print_r wersję tablicy ... – ravisoni

+0

co jest nie tak z wyjściem kodzie próbowałeś? poza zmienną "out" brakuje $ – Levi

+0

Array ( [No] => 101 [Paper_id] => WE3P-1 [Title] => "Elektrycznie mała, trójwymiarowa antena modułowa z dodatkiem Produkcja” [Autor] => Ibrahim Nassar [Aff_list] => "University of South Florida, Tampa, Stany Zjednoczone USA" [Abstracts] => "SLA" ) – Aditya

Odpowiedz

32

Można użyć rodzajowe funkcji:

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

Niesamowite rozwiązanie! –

5

Format danych w swoim pytaniu jest niejednoznaczny, ale przyjmując strukturę $paper_info to co jest poniżej, powinno Ci wyjście, którego szukasz.

$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']; 
} 

Należy również włączyć ostrzeżenia i wyświetlić błędy w środowisku programowania. Mam przeczucie, że ci to pomoże. Podczas programowania możesz albo skonfigurować swoje php.ini, albo wstawić ten kod na początku skryptu php. Tylko pamiętaj, aby usunąć go przed przejściem do produkcji.

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

To powiedzenie: Ostrzeżenie: Niedozwolone przesunięcie łańcucha "Nie" Niedozwolone przesunięcie łańcucha "Autor" – Aditya

+1

Oznacza to, że Twoje dane nie mają formatu, który zakładałem i podałem powyżej. Pomogłabym, gdyby w pytaniu podałeś prawidłową próbkę kodu utworzy zmienną $ paper_info we właściwym formacie: – Levi

+0

$ paper_info jest tablicą tablic takich jak 'No' => $ a (która jest tablicą nosów), 'Paper_id' => $ b (tablica identyfikatorów) .. podobne do wszystkich innych kluczy – Aditya