php - 使用 usort 对数组的动态标题进行排序
问题描述
我有以下数组,结果是
Loc L M S XS
001 2 3 3 1
006 0 2 3 1
012 2 2 2 2
我正在尝试对这个数组的标题进行如下排序:XS、S、M、L、XL(衣服尺寸从小到特大)
我已经弄清楚了 usort 函数如何与下面的示例代码一起使用,但我无法弄清楚如何在我的数组中实现它,因为我不知道如何识别我的数组 L、M、S 中的键,XS?
样本:
<?php
$order = array("XS","S", "M", "L", "XL");
$array = array(
array('id' => "M", 'title' => 'Some Title'),
array('id' => "L", 'title' => 'Some Title'),
array('id' => "S", 'title' => 'Some Title'),
array('id' => "XL", 'title' => 'Some Title'),
);
usort($array, function ($a, $b) use ($order) {
$pos_a = array_search($a['id'], $order);
$pos_b = array_search($b['id'], $order);
return $pos_a - $pos_b;
});
var_dump($array);
?>
数组:
Array
(
[0] => Array
(
[Loc] => 001
[L] => 2
[M] => 3
[S] => 3
[XS] => 1
)
[1] => Array
(
[Loc] => 006
[L] => 0
[M] => 2
[S] => 3
[XS] => 1
)
[2] => Array
(
[Loc] => 012
[L] => 2
[M] => 2
[S] => 2
[XS] => 2
)
)
我的PHP:
echo '<tr>';
//headers
foreach( $result as $key => $value )
{
if( is_array($value) )
{
foreach($value as $key => $column) {
echo ' <th colspan="1" style="width: 30px">'.$key.'</th>';
}
}
else
{
echo '<th colspan="1">Niks</th>';
}
break;
}
echo '</tr>';
//Data
foreach( $result as $key => $value )
{
echo '<tr>';
if( is_array($value) )
{
foreach($value as $key => $column) {
echo '<td>'.$column.'</td>';
}
}
else
{
echo '<td>'.$value.'</td>';
}
echo '</tr>';
}
解决方案
我实际上不会usort
用于这个。您可以根据该$order
数组进行输出。
$order = array("XS","S", "M", "L", "XL");
对于标题,只需迭代 order 数组并在<th>
s 中使用这些值。
echo '<tr>';
//headers
foreach($order as $key)
{
echo ' <th colspan="1" style="width: 30px">'.$key.'</th>';
}
echo '</tr>';
对于数据,迭代每一行的 order 数组,并使用这些 order 值作为键来访问行中的值。
//Data
foreach($result as $key => $row)
{
echo '<tr>';
foreach($order as $key) {
echo '<td>' . ($row[$key] ?? '') . '</td>';
}
echo '</tr>';
}
推荐阅读
- python-3.x - request.get(url) 的输出看起来像 dict 但说它是一个字符串
- ionic-framework - 如何在 Ionic Appflow 中添加构建阶段运行脚本阶段
- python - 打印显示相同的字符串,但如果 == 失败
- c# - 更改类的任何字段的方法
- javascript - 页面加载后自动单击按钮
- sql - SQL:如何显示不同年份的最高值
- reactjs - 当我无法访问定义时,如何处理 TypeScript 中可能的空值
- amazon-web-services - AWS Datapipeline RDS 到 S3 活动错误:无法建立与 jdbc://mysql 的连接:
- javascript - 如何从 React JS 上传和获取图像到 Json-server?
- verilog - 从 Verilog 模块(fwrite)写入更多变量(电路的内部信号)