php – 使用array_multisort对数组进行排序
发布时间:2020-12-13 17:57:12 所属栏目:PHP教程 来源:网络整理
导读:我有以下数组: $array = array( 'note' = array(),'year' = array('2011','2010','2012'),'type' = array('conference','journal','conference'),); 我使用以下函数使用字段类型和另一个数组对数组进行排序: function array_multisort_by_order(array $arr
我有以下数组:
$array = array( 'note' => array(),'year' => array('2011','2010','2012'),'type' => array('conference','journal','conference'),); 我使用以下函数使用字段类型和另一个数组对数组进行排序: function array_multisort_by_order(array $array,$by,array $order) { $order = array_flip($order); $params[] = $array[$by]; foreach($params[0] as &$v) $v = $order[$v]; foreach($array as &$v) $params[] = &$v; unset($v); call_user_func_array('array_multisort',$params); return $array; } 当我调用以下函数时,我收到以下错误: $array = array_multisort_by_order($array,'type',array('conference','journal')); print_r($array['type']); 错误: Warning: array_multisort(): Array sizes are inconsistent. 我知道数组是不一致的.有更好的功能使用吗? 请检查:codepad 期望的输出: Array ( [note] => Array ( [0] => [1] => [2] => ) [year] => Array ( [0] => 2011 [1] => 2012 [2] => 2010 ) [type] => Array ( [0] => conference [1] => conference [2] => journal ) ) 例2: 排列 $array = array( 'note' => array([0]=>'test1',[1]=>'test2'),'year' => array([0]=>'2011',[2]=>'2012'),'type' => array([0]=>'conference',[1]=>'journal',[2]=>'conference'),); 期望的结果2 Array ( [note] => Array ( [0] => test1 [1] => [2] => tes2 ) [year] => Array ( [0] => 2011 [1] => 2012 [2] => ) [type] => Array ( [0] => conference [1] => conference [2] => journal ) ) 谢谢
好的,首先想到的解决方案之一就是添加空值以使它们保持一致:
function array_multisort_by_order(array $array,array $order) { $max = max(array_map('count',$array)); //or,alternatively,depending on input (if there are no 'complete' subarrays): //$max = max(array_map(function($arr){return max(array_keys($arr));},$array))+1; //ADDITION: negative numeric keys: $min = min(array_map(function($arr){return min(array_keys($arr));},$array)); $width = $max - min(0,$min); foreach($array as &$sub){ // $addin = array_diff_key(array_fill(0,$max,null),$sub); // $addin changed for negative keys: $addin = array_diff_key(array_combine(range($min,$max),array_fill(0,$width,null)),$sub); $sub = $addin + $sub; ksort($sub); } $order = array_flip($order); $params[] = $array[$by]; foreach($params[0] as &$v) $v = $order[$v]; foreach($array as &$v) $params[] = &$v; unset($v); call_user_func_array('array_multisort',$params); //no closeures here: //foreach($array as &$sub) $sub = array_filter(function($a){return !is_null($a);},$sub); $filter = create_function('$a','return !is_null($a);'); foreach($array as &$sub) $sub = array_filter($sub,$filter); return $array; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |