Jag har kört fast och uppskattar någon kan slänga ett öga på detta problem, och förhoppningsvis idiotförklara mig och föreslå en smidig lösning.
Jag har en array med nycklar och värden som jag vill dela upp i två lika stora arrayer (eller en array med en rad mindre om ursprungsarrayen har ojämnt antal rader), och sedan slå ihop den igen med vartannat värde från de båda arrayerna. Kortfattat kan vi kalla det: Steg 1: Kupera, Steg 2: Blanda.
Ursprungsarray:
nyckel 1 : värde 1
nyckel 2 : värde 2
nyckel 3 : värde 3
nyckel 4 : värde 4
nyckel 5 : värde 5
Blir
Del 1:
nyckel 1 : värde 1
nyckel 2 : värde 2
nyckel 3 : värde 3
Del 2:
nyckel 4 : värde 4
nyckel 5 : värde 5
Skall bli:
nyckel 1 : värde 1
nyckel 4 : värde 4
nyckel 2 : värde 2
nyckel 5 : värde 5
nyckel 3 : värde 3
Det är viktigt att nyckel-värde-paren upprätthålls i sorteringen.
Den funktionen jag skrivit ser ut enligt nedan, problemet är att den alltid spottar ut en array med jämnt antal rader, och om ursprungsarrayen har ojämnt antal blir sista raden tom. Sedan är den inte särkilt elegant.
function alternatePositions(Array $positions){
$newpositions = array();
$length = sizeof($positions);
$firsthalf = array_slice($positions,0,$length/2+$length%2);
$secondhalf = array_slice($positions,$length/2+$length%2);
$newpositions[] = current($firsthalf);
$newpositions[] = current($secondhalf);
for($i = 0;$i<max(sizeof($firsthalf),sizeof($secondhalf));$i++){
$a = next($firsthalf);
$b = next($secondhalf);
if(!empty($a)){
$newpositions[] = $a;
}
if(!empty($b)){
$newpositions[] = $b;
}
}
return $newpositions;
}