2012-07-28 16 views
15

キーで選択された配列要素を最初の位置に移動するには、PHPで最もエレガントな方法は何ですか?特定のキーを持つ配列項目を配列の最初の位置に移動する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; 
+0

に従うように短いそれを維持するには、単に、あなたは「キーで要素を選択」していないでください。配列の先頭に任意の値を挿入するだけです。私はこれが他の人たちを混乱させるかもしれないと思う。 – galymzhan

+0

@galymzhan $ arr [10]は以前は10で、今度は$ arr [9] = 9から$ arr [10] = 11になります。この例ではこれを明確に説明していないことに同意します。 a) "移動"されている配列要素を表示し、b)異なる要素値を使用することで、キーとその値を混同することが難しくなります。 – octern

+0

一時的な配列とサイクルで良い古い方法となるようです – user965748

答えて

6

キーを設定解除する必要はありません。例では

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

Demo

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

これは選択された要素の前に追加されますが、キーでその要素を参照せず、配列の他の場所から削除します。 – octern

+0

右、オクタンは既に言った – user965748

26

使用array_unshift:このような

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

これは私が前に試みたが、それは動作しませんでした – user965748

+0

何がうまくいかなかったのですか?結果は何でしたか? –

+0

同じ配列で、キーを変更しないかのように見えます – user965748

6

何かが動作するはずです。配列キーが存在するかどうかを確認し、その値を取得してからunsetとし、array_unshiftを使用してアイテムを再度作成し、先頭に配置します。この単純なコードの後

if(in_array($key, $arr)) { 
    $value = $arr[$key]; 
    unset($arr[$key]); 
    array_unshift($arr, $value); 
} 
1
$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; 
} 

、あなたがする必要があるすべては、再配置された配列を表示しています。 :)

7

古い質問とすでに答えていますが、連想配列があればarray_mergeを使用できます。任意の数値キーはarray_unshiftで再インデックス付けされることになるので

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

驚くばかり!あなたは私の一日を救った。 – Mario

1

in the docに述べたように)、それはアレイの第1の位置にあるキーでアイテムを移動する+アレイunion演算子を使用することをお勧めします:

$item = $arr[$key]; 
unset($arr[$key]); 
$arr = array($key => $item) + $arr; 
関連する問題