我有一个非常烦人的数组结构要处理,我需要按任意键组合对其进行排序。2记录显示在下面,但有或没有相同结构的多个记录将出现在活动排序时。
这是两张唱片。
Array(
[0] => Array
(
[cid] => 1
[title] => Mr
[first_name] => Abet
[last_name] => Simbad
[emails] => Array
(
[374] => Array
(
[eid] => 374
[name] => ski lodge
[email] => simbad@skifree.com
)
[373] => Array
(
[eid] => 373
[name] => work
[email] => simbad@work.com
)
[375] => Array
(
[eid] => 375
[name] => personal
[email] => simbad@gmail.com
)
)
)
[1] => Array
(
[cid] => 2
[title] => Mrs
[first_name] => Angie
[last_name] => Stokes
[emails] => Array
(
[590] => Array
(
[eid] => 590
[name] => work
[email] => angie@gmail.com
)
)
)因此,如果我想按照email在emails数组中的升序排序,如何才能在结果数组中获得第二条完整记录?angie@gmail.com出现在simbad之前。
另外,一些记录将不包含电子邮件数组。他们将是结果集中的最后一位。任何帮助都将不胜感激。
数组显示是一个削减版本,但我有地址,笔记,电话和网站在相同的烦人的结构。理想情况下,我可以做一些类似的事情
$sort = array('emails','email')
$data = sort_data_func('ASC',$sort,$data);但任何朝着正确方向前进的步骤都会有所帮助。:)
到目前为止,我有一些代码
$sort = array('emails','email');
foreach($contacts as $ckey => $c){
if(is_array($c[$sort[0]])){
foreach($c[$sort[0]] as $key1 => $sort0){
if($sort0[$sort[1]]!=''){
$res[$sort[0]][$ckey][$sort[1]][] = $sort0[$sort[1]];
}
}
}
}
print_r($res);它产生:
Array
(
[emails] => Array
(
[0] => Array
(
[0] => simbad@skifree.com
[1] => simbad@work.com
[2] => simbad@gmail.com
)
[1] => Array
(
[0] => angie@gmail.com
)
)
)但我不知道从这里往哪里走。
编辑 OK --我现在已经将记录按currect顺序排列--但是如何在结果数组中保留初始记录ID?我用的是这个。
$direction=='ASC'
function cmp_asc($a, $b){
$key = current(array_keys($a));
sort($a[$key]);
$a[$key] = current($a[$key]);
sort($b[$key]);
$b[$key] = current($b[$key]);
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
function cmp_desc($a, $b){
$key = current(array_keys($a));
asort($a[$key]);
$a[$key] = current($a[$key]);
asort($b[$key]);
$b[$key] = current($b[$key]);
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
if($direction=='ASC'){
usort($res[$sort[0]], 'cmp_asc');
}else{
usort($res[$sort[0]], 'cmp_desc');
}In
Array
(
[emails] => Array
(
[0] => Array
(
[email] => Array
(
[0] => simbad@skifree.com
[1] => simbad@work.com
[2] => simbad@gmail.com
)
)
[1] => Array
(
[email] => Array
(
[0] => angie@gmail.com
)
)
)
)Out
Array
(
[emails] => Array
(
[0] => Array
(
[email] => Array
(
[0] => angie@gmnail.com
)
)
[1] => Array
(
[email] => Array
(
[0] => simbad@skifree.com
[1] => simbad@work.com
[2] => simbad@gmail.com
)
)
)
)发布于 2013-09-15 14:20:03
其中一个乌斯托函数与一个自写比较函数相结合,该函数检测两个元素的排序顺序,应该能做到这一点。
https://stackoverflow.com/questions/18812642
复制相似问题