在PHP中将数组元素移动到顶部

时间:2011-03-15 14:01:40

标签: php arrays element

$arr = array(
    'a1'=>'1',
    'a2'=>'2'
);

我需要将a2移动到顶部,同时保持a2作为关键我将如何继续关注它我似乎没有想到一种方法而不会弄乱一些东西:)

5 个答案:

答案 0 :(得分:50)

这是一个可以使用数字和字符串键正确工作的解决方案:

function move_to_top(&$array, $key) {
    $temp = array($key => $array[$key]);
    unset($array[$key]);
    $array = $temp + $array;
}

它有效,因为PHP中的数组是有序映射 顺便说一句,将项目移到最底层使用:

function move_to_bottom(&$array, $key) {
    $value = $array[$key];
    unset($array[$key]);
    $array[$key] = $value;
}

答案 1 :(得分:11)

你可以这样做:

$arr = array(
    'a1'=>'1',
    'a2'=>'2'
);

end($arr);

$last_key     = key($arr);
$last_value   = array_pop($arr);
$arr          = array_merge(array($last_key => $last_value), $arr);

/*
    print_r($arr);

    will output (this is tested):
    Array ( [a2] => 2 [a1] => 1 )
*/

答案 2 :(得分:1)

使用array_splice()union运算符来完成此操作的简单方法:

$arr = array('a1'=>'1', 'a2'=>'2', 'a3' => '3');
$arr = array_splice($arr,array_search('a2',array_keys($arr)),1) + $arr;

修改

回想起来,我不确定为什么我不会这样做:

$arr = array('a2' => $arr['a2']) + $arr;

更清洁,更容易,也可能更快。

答案 3 :(得分:1)

试试这个:

$key = 'a3';
$arr = [
    'a1' => '1',
    'a2' => '2',
    'a3' => '3',
    'a4' => '4',
    'a5' => '5',
    'a6' => '6'
];
if (isset($arr[ $key ]))
    $arr = [ $key => $arr[ $key ] ] + $arr;

结果:

array(
    'a3' => '3',
    'a1' => '1',
    'a2' => '2',
    'a4' => '4',
    'a5' => '5',
    'a6' => '6'
)

答案 4 :(得分:-1)

您还可以查看array_multisort这可以让您使用一个数组来排序另一个数组。例如,这可以允许您将硬编码的值排序外部化为配置文件。

<?php
   $ar1 = array(10, 100, 100, 0);
   $ar2 = array(1, 3, 2, 4);
   array_multisort($ar1, $ar2);

   var_dump($ar1);
   var_dump($ar2);
?>
  

在此示例中,排序后,第一个数组将包含0,10,100,100。第二个数组将包含4,1,2,3。第二个数组中的条目对应于第一个中的相同条目阵列(100和100)也被分类。

输出:

array(4) {
  [0]=> int(0)
  [1]=> int(10)
  [2]=> int(100)
  [3]=> int(100)
}
array(4) {
  [0]=> int(4)
  [1]=> int(1)
  [2]=> int(2)
  [3]=> int(3)
}