我只想问如何按列对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>';