21

キーで選択された配列要素を最初の位置に移動するための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;
4

8 に答える 8

35

使用array_unshift

$new_value = $arr[n];
unset($arr[n]);
array_unshift($arr, $new_value);
于 2012-07-28T18:57:45.940 に答える
15

キーの設定を解除する必要はありません。短くするには、次のようにします

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

デモ

于 2016-07-27T20:02:42.863 に答える
12

古い質問で、すでに回答済みですが、連想配列がある場合は、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"]
于 2013-07-29T19:08:23.433 に答える
7

このようなものが機能するはずです。配列キーが存在するかどうかを確認し、その値を取得しunsetてから、を使用array_unshiftしてアイテムを再度作成し、先頭に配置します。

if(in_array($key, $arr)) {
    $value = $arr[$key];
    unset($arr[$key]);
    array_unshift($arr, $value);
}
于 2012-07-28T19:01:06.607 に答える
4
<?php
$key = 10;
$arr = array(0,1,2,3);
array_unshift($arr,$key);
var_dump($arr) //10,0,1,2,3
?>
于 2012-07-28T18:56:04.667 に答える
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
于 2012-07-28T19:11:09.147 に答える
3

テンキーは(ドキュメントarray_unshiftに記載されているように)インデックスが再作成されるため、配列ユニオン演算子を使用して、配列の最初の位置にある特定のキーを持つアイテムを移動することをお勧めします。+

$item = $arr[$key];
unset($arr[$key]);
$arr = array($key => $item) + $arr;
于 2015-12-04T09:17:40.777 に答える
0
$tgt = 10;
$key = array_search($tgt, $arr);
for($i=0;$i<$key;$i++)
{
   $temp = $arr[$i];
   $arr[$i] = $tgt;
   $tgt = $temp;
}

この単純なコードの後、あなたがする必要があるのは、再配置された配列を表示することだけです。:)

于 2012-07-28T20:32:04.727 に答える