Сохраняйте ключи при смещении ассоциативного массива - PullRequest
1 голос
/ 24 марта 2020

У меня есть этот массив (json_encoded):

string(86) "{
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"6": "5",
"7": "6"
}" 

и при использовании этой функции:

function moveElement(&$array, $a, $b) {
    $out = array_splice($array, $a, 1);
    array_splice($array, $b, 0, $out);
}

я получаю этот вывод:

string(56) "[
    "3",
    "1",
    "2",
    "4",
    "5",
    "6"
]"

Может кто-нибудь объяснить мне, почему я потерял все свои ключи? спасибо!

1 Ответ

1 голос
/ 24 марта 2020

Вы можете комбинировать соединенные ключи и соединенные значения:

function custom_splice(&$ar, $a, $b){
    $out = array_splice($ar, $a, 1);
    array_splice($ar, $b, 0, $out);
}

function moveElement(&$array, $a, $b) {
    $keys = array_keys($array);

    custom_splice($array, $a, $b);
    custom_splice($keys, $a, $b); 

    $array = array_combine($keys,$array);
}

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...