Intereting Posts
file_get_contents () возвращает «не удалось открыть поток» при нажатии HTTPS Объединение данных из XML-файлов с помощью XSLT в PHP WAMP, Laravel 5: Маршруты не работают – NotFoundHttpException Как преобразовать PNG в 8-битный PNG с помощью библиотеки PHP GD Как использовать PHP для сравнения одной переменной с любым экземпляром нечетного числа другой переменной? Как избежать сообщения об отмене изменений композитора Ошибка подключения php в Android? (+ MySQL) Использование php-кода в html … в php проверка регулярного выражения даты php Как я могу получить доступ к роли пользователя в классе Form Builder в Symfony2 Управление анимированными изображениями в PHP жить изменить любые свойства визуализации сайта Как использовать диспетчер объектов в Symfony3 Confusion PDO-only проблема: невозможно подключиться через сокет / Access denied / не удается подключиться к серверу (общий хост) php: как добавить нечетный / четный цикл в массив

PHP разбивает массивы на группы на основе равных значений

У меня есть массив, содержащий массивы с 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>'; }