将具有特定键的数组项移动到数组中的第一个位置,PHP

问题描述 投票:0回答:10

PHP 中将按键选择的数组元素移动到第一个位置最优雅的方法是什么?

输入:

$arr[0]=0;
$arr[1]=1;
$arr[2]=2;
....
$arr[n]=n;
$key=10;

输出:

$arr[0]=10;
$arr[1]=0;
$arr[2]=1;
$arr[3]=2;
....
$arr[n]=n;
php arrays
10个回答
40
投票

使用

array_unshift

$new_value = $arr[n];
unset($arr[n]);
array_unshift($arr, $new_value);

15
投票

老问题,已经回答了,但是如果你有一个关联数组,你可以使用 array_merge。

$arr = array_merge([$key=>$arr[$key]], $arr);

已编辑(上面显示 PHP7+ 表示法,下面是示例)

$arr = ["a"=>"a", "b"=>"b", "c"=>"c", "d"=>"d"];
$arr = array_merge(["c"=>$arr["c"]], $arr);

本次手术的有效效果

$arr == ["c"=>"c", "a"=>"a", "b"=>"b", "d"=>"d"]

13
投票

无需取消设置按键。为了保持简短,只需执行以下操作

//appending $new in our array 
array_unshift($arr, $new);
//now make it unique.
$final = array_unique($arr);

演示


7
投票

这样的东西应该有效。检查数组键是否存在,获取其值,然后

unset
它,然后使用
array_unshift
再次创建该项目并将其放在开头。

if(in_array($key, $arr)) {
    $value = $arr[$key];
    unset($arr[$key]);
    array_unshift($arr, $value);
}

4
投票
<?php
$key = 10;
$arr = array(0,1,2,3);
array_unshift($arr,$key);
var_dump($arr) //10,0,1,2,3
?>

4
投票

由于任何数字键都将使用

array_unshift
重新索引(如文档中所述 ),因此最好使用
+
数组联合运算符将具有特定键的项目移动到数组的第一个位置:

$item = $arr[$key];
unset($arr[$key]);
$arr = array($key => $item) + $arr;

3
投票
$arr[0]=0;
$arr[1]=1;
$arr[2]=2;
$arr[3]=10;


$tgt = 10;
$key = array_search($tgt, $arr);
unset($arr[$key]);
array_unshift($arr, $tgt);

// var_dump( $arr );
array
0 => int 10
1 => int 0
2 => int 1
3 => int 2

0
投票
$tgt = 10;
$key = array_search($tgt, $arr);
for($i=0;$i<$key;$i++)
{
   $temp = $arr[$i];
   $arr[$i] = $tgt;
   $tgt = $temp;
}

在这段简单的代码之后,您所需要做的就是显示重新排列的数组。 :)


0
投票

例如,这样:

$arr = [$key => $arr[$key]] + $arr;


0
投票

如果你有数字键,如果你array_merge它们将从0开始重新索引。 为了避免它使用 + 运算符:

[2 => 'blue'] 
+
[31 =>  'red',
 2 =>  'blue',
 254 =>  'black'];

这会给

[2 =>  'blue',
 31 =>  'red',
 254 =>  'black']
© www.soinside.com 2019 - 2024. All rights reserved.