У меня есть такой массив:
$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']); } }
Вы можете использовать общую функцию:
function _group_by($array, $key) { $return = array(); foreach($array as $val) { $return[$val[$key]][] = $val; } return $return; }
Формат данных в вашем вопросе неоднозначен, но при условии, что структура для $paper_info
– это то, что ниже, это должно $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');