Php 使用usort对数组的动态头进行排序
我得到了以下数组,结果是Php 使用usort对数组的动态头进行排序,php,Php,我得到了以下数组,结果是 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
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);
?>
我的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>';
}
echo';
//标题
foreach($结果为$key=>$value)
{
if(是_数组($value))
{
foreach($key=>$column的值){
回显“.$key.”;
}
}
其他的
{
回声‘Niks’;
}
打破
}
回声';
//资料
foreach($结果为$key=>$value)
{
回声';
if(是_数组($value))
{
foreach($key=>$column的值){
回显“.$column.”;
}
}
其他的
{
回显“.$value.”;
}
回声';
}
我实际上不会为此使用usort
。您可以根据该$order
数组进行输出
$order = array("XS","S", "M", "L", "XL");
对于标题,只需迭代order数组并在
s中使用这些值
echo '<tr>';
//headers
foreach($order as $key)
{
echo ' <th colspan="1" style="width: 30px">'.$key.'</th>';
}
echo '</tr>';
echo';
//标题
foreach($订单作为$key)
{
回显“.$key.”;
}
回声';
对于数据,迭代每行的order数组,并使用这些order值作为键来访问行中的值
//Data
foreach($result as $key => $row)
{
echo '<tr>';
foreach($order as $key) {
echo '<td>' . ($row[$key] ?? '') . '</td>';
}
echo '</tr>';
}
//数据
foreach($key=>$row的结果)
{
回声';
foreach($订单作为$key){
回显“”。($row[$key]??“”);
}
回声';
}
为每一行构建一个模板数组,然后使用从每个项目中复制相关部分应该可以做到这一点
$result = Array
(
Array
(
"Loc" => "001",
"L" => 2,
"M" => 3,
"S" => 3,
"XS" => 1
),
Array
(
"Loc" => "006",
"L" => 0,
"M" => 2,
"S" => 3,
"XS" => 1
),
Array
(
"Loc" => "012",
"L" => 2,
"M" => 2,
"S" => 2,
"XS" => 2
)
);
$order = array("Loc", "XS","S", "M", "L", "XL");
$order = array_fill_keys($order, 0);
$newResult = [];
foreach ( $result as $item ) {
$newResult[] = array_replace($order, $item);
}
print_r($newResult);
输出
Array
(
[0] => Array
(
[Loc] => 001
[XS] => 1
[S] => 3
[M] => 3
[L] => 2
[XL] => 0
)
[1] => Array
(
[Loc] => 006
[XS] => 1
[S] => 3
[M] => 2
[L] => 0
[XL] => 0
)
[2] => Array
(
[Loc] => 012
[XS] => 2
[S] => 2
[M] => 2
[L] => 2
[XL] => 0
)
)
你能帮助我如何在我的代码中实现这一点吗?当我只使用你的代码时,“位置代码”标题就消失了,我再也看不到数字服装尺寸(36、37、38等)。有人能帮我如何在代码中实现用户“不要惊慌”的解决方案吗?当我只使用你的代码时,“位置代码”标题就消失了,我再也看不到数字服装尺寸(36、37、38等)。谢谢!
Array
(
[0] => Array
(
[Loc] => 001
[XS] => 1
[S] => 3
[M] => 3
[L] => 2
[XL] => 0
)
[1] => Array
(
[Loc] => 006
[XS] => 1
[S] => 3
[M] => 2
[L] => 0
[XL] => 0
)
[2] => Array
(
[Loc] => 012
[XS] => 2
[S] => 2
[M] => 2
[L] => 2
[XL] => 0
)
)