php-仅对关联数组的奇数元素排序

如果我有一个像这样的关联数组

> 3 => 50
> 4 => 12
> 5 => 45
> 6 => 89
> 7 => 5
> 8 => 1个

现在,我只想按升序对奇数键的值进行排序.
输出应为:

> 7 => 5
> 4 => 12
> 5 => 45
> 6 => 89
> 3 => 50
> 8 => 1个

解决方法:

要维护原始键,您必须首先将偶数和奇数元素分开:

$odd = $even = array();
array_walk( $array, function( $val, $key ) use ( &$odd, &$even ) { ( $key % 2 ) ? $odd[$key] = $val : $even[$key] = $val; });

然后,对$odd数组进行排序:

asort( $odd );

最后,您重建数组:

$array = array();
while( current( $odd ) || current( $even ) )
{
    if( current( $odd ) )  $array[key($odd)]  = current( $odd );
    if( current( $even ) ) $array[key($even)] = current( $even );
    next( $odd );
    next( $even );
}
print_r( $array );

eval.in demo

请注意,您的问题有点模棱两可:如果您基于键值或键位置是奇数还是偶数,这还不是很清楚:此解决方案考虑键值和-谷歌在进行时和如果进行检查-即使您拥有比奇数键还要多(反之亦然).

上一篇:javascript-sortBy保留键名


下一篇:PHP-排序爆炸变量