2012-07-28 98 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 2012-07-28 19:00:49

+0

@galymzhan我認爲這意味着$ arr [10]以前是10,現在它從$ arr [9] = 9到$ arr [10] = 11。我同意這個例子沒有清楚地說明這一點。 a)顯示正被「移動」的數組元素,以及b)使用不同的元素值,因此更難將密鑰與其值相混淆。 – octern 2012-07-28 19:02:10

+0

看起來最好的方法是用臨時數組和循環的老方法 – user965748 2012-07-28 19:04:51

回答

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

This prepends所選元素,但它不會通過鍵引用它,並將其從數組中的其他位置移除。 – octern 2012-07-28 18:59:38

+0

對,octern已經說過 – user965748 2012-07-28 19:00:38

26

使用array_unshift

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

這個我以前試過,但是沒有用 – user965748 2012-07-28 18:59:46

+0

什麼都沒有用?結果是什麼? – 2012-07-28 19:00:39

+0

相同的陣列,它看起來好像它不會更改密鑰 – user965748 2012-07-28 19:01:31

6

這樣的事情應該工作。檢查數組鍵是否存在,獲取其值,然後使用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。

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

太棒了!你拯救了我的一天。 – Mario 2014-10-09 08:18:29

1

由於任何數字鍵將被重新索引與array_unshift(如指出in the doc),最好使用+陣列聯合運營商在一個數組的第一個位置具有一定的鍵來移動一個項目:

$item = $arr[$key]; 
unset($arr[$key]); 
$arr = array($key => $item) + $arr; 
相關問題