基于相等值将PHP数组分组

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个回答

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

foreach ($return as $key => $value) {
  echo implode(',', $value)." ".$key;
}

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
        )

)

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>';
}
?>

0
你可以这样做:

$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>';
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接