2016-05-04 8 views
-5

I haben ArrayPHP Insert Wert in Array (Alphabet-Taste)

array (
    a => "1", 
    b => "2", 
    c => "3" 
) 

Wenn I "4" an der Position "b" ein. alter Wert an Position b wird in Position "c" verschoben. und der alte Wert an Position c wird auf Position "d" verschoben.

Hinweis Position "d" wird automatisch erstellt, wenn Wert eingefügt wird. wenn Schlüssel in Array a, b, c, d, e, f, g, wenn Insert-Wert im Array, es automatisch erstellt Position "h"

So Ergebnis ist:

array (
    a => "1", 
    b => "4", 
    c => "2", 
    d => "3" 
) 

wie kann ich tun ? Oder haben Sie einige Vorschläge

+0

müssen Sie tun $ array ['d'] = $ array ['b'] vor –

+0

Was ... Wie machst du was? Bitte erläutern Sie Ihre Frage. – Epodax

+0

wollen Sie etwas wie 'foreach (Bereich ('a', 'z') als $ al) { $ neu [$ al] = $ al; } '?? –

Antwort

2

Hier ist addToStack Funktion array_keys, array_search und array_slice Funktionen:

$arr = array(
    'a' => "1", 
    'b' => "2", 
    'c' => "3" 
); 

/** 
* Inserts a new element to stack with offset 
* @param $arr the initial array passed by reference 
* @param $pos string key (position) 
* @param $value inserted value 
*/ 
function addToStack(&$arr, $pos, $value) { 
    $keys = array_keys($arr); 
    $offset = array_search($pos, $keys); 
    $rest = array_slice($arr, $offset); 

    $arr[$pos] = $value; 
    foreach ($rest as $v) { 
     $arr[++$pos] = $v; 
    } 
} 

addToStack($arr, 'b', '4'); 
print_r($arr); 

Der Ausgang:

Array 
(
    [a] => 1 
    [b] => 4 
    [c] => 2 
    [d] => 3 
) 
+0

Schöne Lösung ..... –

+0

@FrayneKonok, danke – RomanPerekhrest

0

Dieser Trick kann Ihnen helfen.

Zuerst müssen Sie die Funktion mit array, key und value aufrufen. In der Funktion zuerst prüfen, ob der Schlüssel existiert oder nicht. Wenn der Schlüssel existiert, dann speichere den Wert, setze nun den Wert in Array mit Schlüssel und Wert, finde den letzten Schlüssel mit der Funktion end und erhöhe dann den Wert um eins, um das nächste Zeichen zu erhalten, wenn der Schlüssel nicht existiert, ohne den Wert zu speichern.

$arr = array (
    'a' => "1", 
    'b' => "2", 
    'c' => "3" 
); 

function array_push_user($arr, $key, $val){ 
    $store = ''; 
    $bk = ''; 
    if(array_key_exists($key, $arr)){ 
     foreach($arr as $keys => $vals){ 
      if($keys == $key){ 
       $store = $val; 
       $bk = $vals; 
       $lst = $keys; 
      }else{ 
       if($bk != ""){ 
        $store = $bk; 
        $bk = $vals; 
       } 
       else 
        $store = $vals; 
       $lst = $keys; 
      } 
      $arr[$lst] = $store; 
     } 
     $arr[chr(ord($lst)+1)] = $bk; 
    }else{ 
     end($arr); 
     $lst = key($arr); 
     $arr[chr(ord($lst)+1)] = $val; 
    } 
    return $arr; 
} 



$ret_arr = array_push_user($arr, 'b', '4'); 
echo '<pre>'; 
print_r($ret_arr); 

Ergebnis

Array 
(
    [a] => 1 
    [b] => 4 
    [c] => 2 
    [d] => 3 
) 
+0

sollte 'c =>" 2 "sein,' – RomanPerekhrest

+0

Opps .., lassen Sie mich überprüfen. –

+0

@RomanPerekruh, ich habe es auf meine Art gemacht. Aber du hast es geschickt gemacht. –