Not necessarily the fastest approach, but perhaps it'll introduce a few people to some features of PHP that they weren't aware of before:
$isEven = function ($value) {
return !($value & 1);
};
$isOdd = function ($value) {
return $value & 1;
};
function keyfilter($values, $function) {
return array_intersect_key(
$values,
array_filter(
array_keys($values),
$function
)
);
}
$colourArray = array('red','blue','green','purple');
$mi = new MultipleIterator(
MultipleIterator::MIT_NEED_ANY |
MultipleIterator::MIT_KEYS_ASSOC
);
$mi->attachIterator(
new ArrayIterator(
keyfilter(
$colourArray, $isEven
)
),
'key'
);
$mi->attachIterator(
new ArrayIterator(
keyfilter(
$colourArray, $isOdd
)
),
'value'
);
$newColourArray = array();
foreach($mi as $details) {
$newColourArray[$details['key']] = $details['value'];
}
var_dump($newColourArray);