首页 > 解决方案 > 使用 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>';
}

标签: php

解决方案


我实际上不会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>';
}

推荐阅读