从广义上讲,我有一个以下格式的二维数组:
$elements = array( 0 => array('typeA', 'desc'),
1 => array('typeB', 'desc'),
2 => array('typeA', 'desc'),
n => array('typeC', 'desc'));
WheretypeX
可以是 5 种可能性中的 1 种,并且desc
可以是任何东西。对最终目标进行$elements
排序,使得共享 a 的两个元素typeX
永远不会相邻。这是我的功能:
function fixDbls($elems) {
$final = array();
$singles = array();
$doubles = array();
$lastelem = null;
foreach($elems as $elem) {
if(!$lastelem) { // set this the first time through
$lastelem = $elem[0];
$singles[] = $elem;
} else { //otherwise, sort!
if($lastelem == $elem[0]) {
$doubles[] = $elem;
} else {
$singles[] = $elem;
}
}
}
if ($doubles) {
// I suspect this is where it all goes wrong, I am awful at recursion!
$final = fixDbls(array_merge($singles, $doubles));
} else {
$final = $singles;
}
return $final;
}
如果有人可以帮助我理解为什么这不起作用(不仅仅是代码,而是我做出错误假设或我对这个问题的思考出卖了我的地方 - 有助于使这对公众更普遍有用!)我会永远,永远如此感激。