Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

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
share|improve this question
add comment

4 Answers

up vote 2 down vote accepted
foreach ($array as $key => $value) {
 $return[$value[1]][] = $value[0];
}

foreach ($return as $key => $value) {
  echo implode($value, ',')." ".$key;
}
share|improve this answer
    
Perfect!!!! Thank you!!!! =) –  user2419708 Jul 5 '13 at 18:57
add comment
<?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
        )

)
share|improve this answer
add comment

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>';
}
?>
share|improve this answer
add comment

You can do it like this:

$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>';
}
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.