Como casi de una sola línea, creo que esto va a ser mi favorito:
$even = $odd = array();
foreach($array as $k => $v) $k % 2 ? $odd[] = $v : $even[] = $v;
O para un poco más pequeña?velocidad:
$even = $odd = array();
foreach($array as $k => $v) ($k & 1) === 0 ? $even[] = $v : $odd[] = $v;
variante A poco más detallado:
$both = array(array(), array());
// or, if $array has at least two elements:
$both = array();
foreach($array as $k => $v) $both[ $k % 2 ][] = $v;
list($even, $odd) = $both;
Con array_chunk
:
$even = $odd = array();
foreach(array_chunk($array, 2) as $chunk){
list($even[], $odd[]) = isset($chunk[1]) ? $chunk : $chunk + array(null, null);
// or, to force even and odd arrays to have the same count:
list($even[], $odd[]) = $chunk + array(null, null);
}
Si $ array está garantizado para tener un número par de elementos:
$even = $odd = array();
foreach(array_chunk($array, 2) as $chunk)
list($even[], $odd[]) = $chunk;
PHP 5.5.0+ con array_column
:
$chunks = array_chunk($array, 2);
$even = array_column($chunks, 0);
$odd = array_column($chunks, 1);
Algo similar para versiones anteriores de PHP. Las claves serán 0,2,4, ... y 1,3,5, .... Si no te gusta esto, aplicar una array_values
también:
$even = array_intersect_key($array, array_flip(range(0, count($array), 2)));
$odd = array_intersect_key($array, array_flip(range(1, count($array), 2)));
o
$even = array_intersect_key($array, array_fill_keys(range(0, count($array), 2), null));
$odd = array_intersect_key($array, array_fill_keys(range(1, count($array), 2), null));
Las claves de 'B', '' d' y F' son '1',' 3' y '5' ... ¿estás seguro de que no deberían ser' $ impares'? – Krycke