You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用usort对PHP数组的动态服装尺码表头排序?

解决方法

你需要先定义好表头的目标顺序,再根据这个顺序重新排列子数组的键,这样输出表头和数据时就能按照你想要的尺码顺序展示了。

具体步骤:

  • 先定义包含Loc和目标尺码顺序的数组,把Loc放在最前面,然后是从小到大的尺码:XS、S、M、L、XL;
  • 从结果数组中提取第一个子数组的键,再根据定义好的顺序对这些键进行排序;
  • 输出表头和表格数据时,都按照这个排序后的键列表来遍历,而非直接使用子数组的默认键顺序。

修改后的完整PHP代码:

<?php
// 你的原始结果数组
$result = [
    ['Loc' => '001', 'L' => 2, 'M' => 3, 'S' => 3, 'XS' => 1],
    ['Loc' => '006', 'L' => 0, 'M' => 2, 'S' => 3, 'XS' => 1],
    ['Loc' => '012', 'L' => 2, 'M' => 2, 'S' => 2, 'XS' => 2]
];

// 定义表头的目标顺序:先Loc,再从小到大的尺码
$headerOrder = ['Loc', 'XS', 'S', 'M', 'L', 'XL'];

// 获取第一个子数组的键,然后按照headerOrder排序
$originalKeys = array_keys($result[0]);
usort($originalKeys, function($a, $b) use ($headerOrder) {
    // 找到每个键在目标顺序中的位置,不存在的话放到最后
    $posA = array_search($a, $headerOrder) !== false ? array_search($a, $headerOrder) : count($headerOrder);
    $posB = array_search($b, $headerOrder) !== false ? array_search($b, $headerOrder) : count($headerOrder);
    return $posA - $posB;
});

// 输出表头
echo '<tr>';
foreach($originalKeys as $key) {
    echo ' <th colspan="1" style="width: 30px">'.$key.'</th>';
}
echo '</tr>';

// 输出表格数据
foreach($result as $row) {
    echo '<tr>';
    foreach($originalKeys as $key) {
        // 处理可能不存在的键(比如XL),如果没有值就显示空或者0
        $value = isset($row[$key]) ? $row[$key] : '';
        echo '<td>'.$value.'</td>';
    }
    echo '</tr>';
}
?>

代码说明:

  1. 表头排序逻辑:用usort对原始键数组排序,通过array_search获取每个键在目标顺序中的位置,位置小的排在前面;如果某个键不在目标顺序里(比如未来新增的其他键),会被自动放到最后。
  2. 数据输出:遍历排序后的键列表,对应取每一行的数据,就算某个尺码(比如XL)在当前数据里没有,也会预留表头位置,值默认显示为空(你可以改成0或者其他自定义默认值)。
  3. 既保留了Loc列在最前面的位置,又把尺码按照从小到大的顺序重新排列,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Bldjef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:34:33