I have an Array containing arrays with 2 values, the first one is the Number of the Author the second is his Affiliation.
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
)
)
How can I group the Authors if the Affiliation is the same? I need the output to be something like:
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>';
example
results in:
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
)
)
Try this code , it should solve your problem:
<?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>';
}
?>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With