[a, 1, 3, 9, 0, 13]
[b, 5, 6, 0, 0, 11]
[j, 0, 6, 2, 1, 9]
[c, 1, 0, 8, 5, 14]
[d, 0, 0, 0, 17, 17]
[e, 0, 5, 0, 0, 5]
[h, 0, 0, 3, 3, 6]
数组需要在
上排序所以排序后的上面数组应该是,
[j, 0, 6, 2, 1, 9]
[a, 1, 3, 9, 0, 13]
[c, 1, 0, 8, 5, 14]
[h, 0, 0, 3, 3, 6]
[b, 5, 6, 0, 0, 11]
[d, 0, 5, 0, 0, 5]
[d, 0, 0, 0, 17, 17]
我通过此代码
正常地将多维数组排序到最后一个值function multiarraysorter($arr, $index) {
$b = array();
$c = array();
foreach ($arr as $key => $value) {
$b[$key] = $value[$index];
}
asort($b);
foreach ($b as $key => $value) {
$c[] = $arr[$key];
}
return $c;
}
任何想法如何完成基于值的零数的第一种排序?
答案 0 :(得分:1)
您可以使用usort
执行以下任务:
$arr=[['a', 1, 3, 9, 0, 13],['b', 5, 6, 0, 0, 11],['j', 0, 6, 2, 1, 9],['c', 1, 0, 8, 5, 14],['d', 0, 0, 0, 17, 17],['e', 0, 5, 0, 0, 5],['h', 0, 0, 3, 3, 6]];
usort($arr,function($a,$b){
$infoa=array_count_values($a);
$infob=array_count_values($b);
if(empty($infoa[0])) $infoa[0]=0;
if(empty($infob[0])) $infob[0]=0;
if($infoa[0]==$infob[0])
{
return end($a)-end($b);
}
else
{
return $infoa[0]-$infob[0];
}
});
print_r($arr);
生成的输出为:
Array
(
[0] => Array
(
[0] => j
[1] => 0
[2] => 6
[3] => 2
[4] => 1
[5] => 9
)
[1] => Array
(
[0] => a
[1] => 1
[2] => 3
[3] => 9
[4] => 0
[5] => 13
)
[2] => Array
(
[0] => c
[1] => 1
[2] => 0
[3] => 8
[4] => 5
[5] => 14
)
[3] => Array
(
[0] => h
[1] => 0
[2] => 0
[3] => 3
[4] => 3
[5] => 6
)
[4] => Array
(
[0] => b
[1] => 5
[2] => 6
[3] => 0
[4] => 0
[5] => 11
)
[5] => Array
(
[0] => e
[1] => 0
[2] => 5
[3] => 0
[4] => 0
[5] => 5
)
[6] => Array
(
[0] => d
[1] => 0
[2] => 0
[3] => 0
[4] => 17
[5] => 17
)
)
答案 1 :(得分:0)
尝试此工作:
<?php
$res_ary = array();
$res_ary = sortArray($arr,'key_value');
?>
在sortArray函数中,您传递两个参数,一个是数组,您想要简短,第二个是键值,您必须对其进行排序。
<?php
function sortArray($arrData, $p_sort_field, $p_sort_type = false )
{
if(!empty($arrData))
{
foreach($arrData as $data)
{
$newData [] = $data;
}
for($i=0; $i<count($newData); $i++)
{
$ar_sort_field[$i]=$newData[$i][$p_sort_field];
}
array_multisort($ar_sort_field, ($p_sort_type ? SORT_DESC : SORT_ASC), $newData);
return $newData;
}
}
?>