0

我只想问如何按列对我的二维数组进行排序?这是我的数组:

$sort_arr由行和列表示: $sort_arr[$row][$column];

在我的列索引 3 中,数据是净销售额,我想输出它按净销售额降序排序,即列索引 3。

我会把它放在这里:

$size_sort = sizeof($sort_arr);
for($a=0;$a<$size_sort;$a++){
    $tabletr2 .= "<tr class='con'>
        <td align='center' > ".$rank." </td>      
        <td align='left'> ".$sort_arr [$a][$col2]." </td>      
        <td align='left'> ".$sort_arr [$a][$col2+1]." </td>      
        <td align='right'> ".$sort_arr [$a][$col2+2]." </td>
        <td align='right'> ".$sort_arr [$a][$col2+3]." </td>
        <td align='right'> ".$sort_arr [$a][$col2+4]." % </td>
        <td align='right'> ".$sort_arr [$a][$col2+5]." </td>
    </tr>";

}

多谢你们!

4

4 回答 4

0

你可以下面的伎俩

<?php
$sort_arr[0][0] = 'a';
$sort_arr[0][1] = 'b';
$sort_arr[0][2] = 'c';
$sort_arr[0][3] = 'd';
$sort_arr[0][4] = 'e';
$sort_arr[0][5] = 'f';


$size_sort = sizeof($sort_arr);
$col2 =0;
for($a=0;$a<$size_sort;$a++){

    $temp = $sort_arr;

    unset($temp[$a][0]);
    unset($temp[$a][1]);
    unset($temp[$a][2]);    


    $temp= array_reverse($temp[$a],true);

    $tabletr2 .= "<tr class='con'>
    <td align='center' > ".$rank." </td>      
    <td align='left'> ".$sort_arr [$a][$col2]." </td>      
    <td align='left'> ".$sort_arr [$a][$col2+1]." </td>      
    <td align='right'> ".$sort_arr [$a][$col2+2]." </td>

    <td align='right'> ".$temp[$col2]." </td>
    <td align='right'> ".$temp[$col2+1]." </td>
    <td align='right'> ".$temp[$col2+2]." </td>
    </tr>";

}
于 2013-07-12T10:41:54.613 回答
0

您可以使用 array_multisort,也可以用于 2D 数组:

首先你从一列中创建一个临时数组

你可以像这样对整个数组进行排序:

变量 $column,您设置要排序的列的编号

foreach($sort_arr as $key => $value){
    $tempColumnArr[$key]=$v[$column];
}
array_multisort($tempColumnArr, SORT_DESC, $sort_arr );  
于 2013-07-12T10:10:29.583 回答
0

usort使用函数对数组进行排序。您可以将列索引保存在会话变量中,如下所示:

function cmp($a, $b)
{
    $col_index = isset($_SESSION['sort_col_index']) ? $_SESSION['sort_col_index'] : 0;
    if(isset($a[$col_index]) && isset($b[$col_index]))
    {
        // the column index is valid in both array. You can compare your data here.
        if ($a < $b)
           return -1;
        else if ($a > $b)
           return 1;
        else
           return 0;
    }
    else
        return 0;
}

// set the index column
$_SESSION['col_sort_index'] = 3;

// sort your array
usort($sort_arr, "cmp");

// display output
$size_sort = sizeof($sort_arr);
    for($a=0;$a<$size_sort;$a++){
        $tabletr2 .= "<tr class='con'>
            <td align='center' > ".$rank." </td>      
            <td align='left'> ".$sort_arr [$a][$col2]." </td>      
            <td align='left'> ".$sort_arr [$a][$col2+1]." </td>      
            <td align='right'> ".$sort_arr [$a][$col2+2]." </td>
            <td align='right'> ".$sort_arr [$a][$col2+3]." </td>
            <td align='right'> ".$sort_arr [$a][$col2+4]." % </td>
            <td align='right'> ".$sort_arr [$a][$col2+5]." </td>
            </tr>";

    }
于 2013-07-12T10:04:44.067 回答
-1

您可以使用以下代码

$sort_arr[0][0] = 'a';
$sort_arr[0][1] = 'b';
$sort_arr[0][2] = 'c';
$sort_arr[0][3] = 'd';
$sort_arr[0][4] = 'e';
$sort_arr[0][5] = 'f';
$sort_arr[0][6] = 'g';
$sort_arr[0][7] = 'h';

$sort_arr[1][0] = 'h';
$sort_arr[1][1] = 'k';
$sort_arr[1][2] = 'z';

for($i=0; $i<count($sort_arr);$i++)
{       
    $sort_arr[$i] = array_reverse($sort_arr[$i]);

}

echo '<pre>';
print_r($sort_arr);
echo '</pre>';
于 2013-07-12T09:51:51.080 回答