У меня есть массив, содержащий массивы с 2 значениями, первый – это номер автора, второй – его принадлежность.
Array ( [0] => Array ( [0] => 2 [1] => Department of General Chemistry ) [1] => Array ( [0] => 3 [1] => Institute of Silicate Materials ) [2] => Array ( [0] => 4 [1] => Department of General Chemistry ) [3] => Array ( [0] => 5 [1] => Department of General Chemistry ) [4] => Array ( [0] => 6 [1] => Institute of Silicate Materials ) )
Как я могу группировать авторов, если аффилиация одинакова? Мне нужно, чтобы результат был чем-то вроде:
3,6 Institute of Silicate Materials 2,4,5 Department of General Chemistry
foreach ($array as $key => $value) { $return[$value[1]][] = $value[0]; } foreach ($return as $key => $value) { echo implode(',', $value)." ".$key; }
<?php //the array $data = array(array(2,'Department of General Chemistry'),array(3,'Institute of Silicate Materials'),array(4,'Department of General Chemistry'),array(5,'Department of General Chemistry'),array(6,'Institute of Silicate Materials')); //a new array to store the data $newData = array(); //loop over each value in the data foreach($data as $d){ //check if a key exists under the new data for the common value (affiliation) if(!isset($newData[$d[1]])){ //doesn't exist, group under the common value (affiliation) $newData[$d[1]] = array(array(),$d[1]); } //add the author under it's affiliation $newData[$d[1]][0][] = $d[0]; } //get the values from the new data, this resets the keys $newData = array_values($newData); //display the data echo '<pre>'.print_r($newData,1).'</pre>';
пример
результаты:
Array ( [0] => Array ( [0] => Array ( [0] => 2 [1] => 4 [2] => 5 ) [1] => Department of General Chemistry ) [1] => Array ( [0] => Array ( [0] => 3 [1] => 6 ) [1] => Institute of Silicate Materials ) )
Попробуйте этот код, он должен решить вашу проблему:
<?php $element = array ( array ( 2 ,'Department of General Chemistry' ) , array ( 3, 'Institute of Silicate Materials' ), array ( 4 , 'Department of General Chemistry' ) , array ( 5 , 'Department of General Chemistry' ) , array ( 6 , 'Institute of Silicate Materials' ) ); $res = array(); for($i=0; $i< count($element); $i++){ $res[$element[$i][1]][] = $element[$i][0]; } echo '<pre>'; var_dump($res); echo '</pre>'; foreach ($res as $key => $value){ echo $key .' : '. implode(',',$value). '<br>'; } ?>
Вы можете сделать это следующим образом:
$ar = array ( array( 2, 'Department of General Chemistry' ), array( 3, 'Institute of Silicate Materials' ), array( 4, 'Department of General Chemistry' ), array( 5, 'Department of General Chemistry' ), array( 6, 'Institute of Silicate Materials' ) ); $result = array(); foreach ($ar as $key => $value) { if (array_key_exists($value[1], $result)) { $result[$value[1]] .= ',' . $value[0]; } else { $result[$value[1]] = $value[0]; } } foreach ($result as $key => $value) { echo $value . ' ' . $key . '<br>'; }