2012-07-28 6 views
15

Was ist die eleganteste Art in PHP, ein Array-Element durch Schlüssel an die erste Position verschoben zu verschieben?Verschieben Array Element mit bestimmten Schlüssel an die erste Position in einem Array, PHP

Eingang:

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

Ausgang:

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

Im Beispiel zu folgen, sind Sie nicht „wählen Element mit Schlüssel“. Sie fügen nur einen beliebigen Wert an den Anfang des Arrays ein. Ich denke, das könnte andere Leute verwirren – galymzhan

+0

@galymzhan Ich denke es ist impliziert, dass $ arr [10] vorher 10 war, und jetzt geht es von $ arr [9] = 9 nach $ arr [10] = 11. Ich stimme zu, dass das Beispiel dies nicht deutlich macht. Es wäre besser, a) das Arrayelement, das "verschoben" wird, anzuzeigen und b) verschiedene Elementwerte zu verwenden, so dass es schwieriger ist, einen Schlüssel mit seinem Wert zu verwechseln. – octern

+0

Es scheint, das beste ist die gute alte Art mit einem temporären Array und Zyklus – user965748

Antwort

6

Keine Notwendigkeit, Schlüssel zu deaktivieren. Um es kurz zu tun wie

//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

Dies Prepends das ausgewählte Element, aber es verweist nicht auf Schlüssel und entfernt es von woanders in dem Array. – octern

+0

Richtig, otern sagte bereits, dass – user965748

26

Verwendung array_unshift:

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

Dies habe ich zuvor versucht, aber es hat nicht funktioniert – user965748

+0

Was hat nicht funktioniert? Was war das Ergebnis? –

+0

Das gleiche Array, es sieht so aus, als ob es Schlüssel nicht ändert – user965748

6

So etwas wie dies funktionieren sollte. Überprüfen Sie, ob der Array-Schlüssel existiert, erhalten Sie seinen Wert, dann unset it, dann verwenden Sie array_unshift, um das Element erneut zu erstellen und es am Anfang zu platzieren.

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; 
} 

Nach diesem einfachen Code, alles, was Sie tun müssen, ist die neu arrangierten Array anzuzeigen. :)

7

Alte Frage, und bereits beantwortet, aber wenn Sie ein assoziatives Array haben, können Sie array_merge verwenden.

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

Super! Du hast meinen Tag gerettet. – Mario

1

Da jede Zifferntaste würde mit array_unshift neu indexiert werden (wie bereits erwähnt in the doc), ist es besser, den + Array union Operator zu verwenden, um ein Element mit einem bestimmten Schlüssel an der ersten Position eines Feldes zu bewegen:

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