我有一个相当烦人的数组结构可以使用,我需要通过任意组合键对其进行排序。下面显示了 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
)
)
)
但我不知道从这里去哪里。
编辑 好的我现在有当前顺序的记录,但是如何在结果数组中保留初始记录 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');
}
在
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
)
)
)
)
出去
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
)
)
)
)