我只是想问一下如何按列对我的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>";
}
谢谢大家!
答案 0 :(得分: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>";
}
答案 1 :(得分:0)
您也可以使用array_multisort,也可以使用2D数组:
首先从一列中创建一个临时数组
你可以像这样对整个数组进行排序:
变量$ column,您可以设置要按哪个列排序的数字
foreach($sort_arr as $key => $value){
$tempColumnArr[$key]=$v[$column];
}
array_multisort($tempColumnArr, SORT_DESC, $sort_arr );
答案 2 :(得分: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>";
}
答案 3 :(得分:-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>';