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