10

我有一个包含 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
4

4 回答 4

25
foreach ($array as $key => $value) {
 $return[$value[1]][] = $value[0];
}

foreach ($return as $key => $value) {
  echo implode(',', $value)." ".$key;
}
于 2013-07-05T18:55:01.297 回答
3
<?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
        )

)
于 2013-07-05T18:56:31.587 回答
2

试试这个代码,它应该可以解决你的问题:

<?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>';
}
?>
于 2013-07-05T19:04:09.183 回答
0

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>';
}
于 2013-07-05T19:00:40.903 回答