PHP怎么重组排序数组?

比如:
SELECT *FROM table WHERE cid IN ( 1, 3 );

得到结果

id cid name nian
1 1 名称1 2020
2 1 名称2 2019
3 1 名称3 2018
4 1 名称4 2017
5 2 名称5 2020
6 2 名称6 2019
7 2 名称7 2018

想要的结果

id nian name name1
1 2020 名称1 名称5
2 2019 名称2 名称6
3 2018 名称3 名称7
4 2017 名称4

当然也可以用PHP处理查询结果
目的是可以使得前端可以用一张表显示数据
如下:

<table>
<tr><td>2020</td><td>名称1</td><td>名称5</td></tr>
<tr><td>2019</td><td>名称2</td><td>名称6</td></tr>
<tr><td>2018</td><td>名称3</td><td>名称7</td></tr>
<tr><td>2017</td><td>名称4</td><td></td></tr>
</table>

试试下边的代码:

$dbCon = mysqli_connect("localhost","root","123456","test"); 
$sql ="SELECT id, nian,GROUP_CONCAT(name) AS `name` FROM test0219 WHERE cid IN(1,2) GROUP BY nian ORDER BY id ASC";
$result = mysqli_query($dbCon,$sql);
echo "<table>
    <tr>
    <th>nian</th>
    <th>name</th>
    <th>name1</th>
    </tr>";
$nameStrAll = '';
while($row=mysqli_fetch_array($result)){
    if(strpos($row['name'],',') !== false){
        $nameStr = '';
        $nameArr = explode(',',$row['name']);
        foreach($nameArr as $key => $value){
            $nameStr .= "<td>".$value."</td>";
        }
        $nameStrAll .= "<tr><td>".$row['nian']."</td>".$nameStr;
    }else{
        $nameStrAll .=  "<tr><td>".$row['nian']."</td>"."<td>".$row['name']."</td>";
    }
}
echo $nameStrAll;
echo "</table>";
mysqli_close($dbCon);

//数据库代码省略
//按年份分组
$ret = [];
while($row=mysqli_fetch_array($result)){
    if(key_exists($row['year'],$ret)){
        $ret[$row['year']][]=$row['name'];
    }else{
        $ret[$row['year']]=[]; //建立以年份为键的子数组
        $ret[$row['year']][]=$row['name'];
    }
}
//求最大列
$max = 0;
foreach($ret as $val){
    $tmp = count($val);
    $max = $tmp>$max ? $tmp : $max;
}

$html = "";
foreach($ret as $k=>$v) {
    $html .= "<td>{$i}</td>"; //序号
    $html .= "<td>{$k}</td>"; //年份
    for ($i=0; $i < $max; $i++) { //以最大列建立td数量
        if(isset($ret[$i])){  //还有值
            $html .= "<td>{$ret[$i]}</td>";
        }else{ //没有值了
            $html .= "<td></td>";
        }
    }
}
// 最后再把html输出。

楼上得foreach解决了么

SELECT *FROM table WHERE cid IN ( 1, 3 );
改成
SELECT id, nian,GROUP_CONCAT(name) AS name
FROM table WHERE cid IN ( 1, 3 );
name是一个list
然后再写一个循环依次遍历出name中的所有元素即可


function sortByDate($a, $b) {
   return strtotime($a) > strtotime($b);
}
 
$cont_history = Array ( 
    '20-02-2015' => Array ( 'activity' => 'GATE IN',  'by' => '',  'location' => 'COLOMBO', 'depot' => 'CNLS' ), 
    '15-03-2015' => Array ( 'activity' => 'GATE OUT', 'by' => '',  'location' => 'COLOMBO', 'depot' => 'CNLS' ), 
    '18-03-2015' => Array ( 'activity' => 'GATE IN',  'by' => '',  'location' => 'CHENNAI', 'depot' => 'GOBAL'), 
    '05-04-2015' => Array ( 'activity' => 'GATE OUT', 'by' => '',  'location' => 'CHENNAI', 'depot' => 'GOBAL'), 
    '10-04-2015' => Array ( 'activity' => 'GATE IN',  'by' => '',  'location' => 'MUMBAI',  'depot' => 'CONS' ), 
    '13-05-2015' => Array ( 'activity' => 'GATE OUT', 'by' => '',  'location' => 'MUMBAI',  'depot' => 'CONS' ), 
    '10-02-2015' => Array ( 'activity' => 'Container Bought', 'by' => 'CARU', 'location' => 'COLOMBO', 'depot' => 'CNLS' ),
    '07-05-2015' => Array ( 'activity' => 'Container Sold',   'by' => 'TCPL', 'location' => 'MUMBAI',  'depot' => 'CONS' ) 
);
 
uksort($cont_history, 'sortByDate');
 
print_r($cont_history);

<?php
    $conn=mysqli_connect("localhost","php","");
    mysqli_select_db($conn,"php");
    $result = mysqli_query($conn,"SELECT *FROM table WHERE cid IN ( 1, 3 )");
    echo "<table border='1'>
    <tr>
    <th>id</th>
    <th>name</th>
    <th>score</th>
    <th>grade</th>
    </tr>";
    while($row=mysqli_fetch_array($result)){
        echo "<tr>";
        echo "<td>".$row['id']."</td>";
        echo "<td>".$row['name']."</td>";
        echo "</tr>";
    }
    echo "</table>";
    mysqli_close($conn);
?>

你这个是按照cid来分类的吧,PHP使用foreach循环,判断cid,cid相同的放在一起就行了

https://ask.csdn.net/questions/851347?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-1.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-1.pc_feed_download_top3ask