PHP:二维数组排序


PHP: 2 Dimentional Array Sorting

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

由行和列表示的$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>";
}

谢谢,伙计们!

使用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>";
    }

您可以使用array_multi-sort,也可以用于2D阵列:

首先,你用一列制作一个临时数组

你可以像这样对整个阵列进行排序:

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

foreach($sort_arr as $key => $value){
    $tempColumnArr[$key]=$v[$column];
}
array_multisort($tempColumnArr, SORT_DESC, $sort_arr );  

您可以在下面欺骗

<?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>";
}

您可以使用以下代码

$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>';