изменить имя последнего ключа из массива в php - PullRequest
2 голосов
/ 20 апреля 2010

я хочу иметь возможность изменить последний ключ из массива я пытаюсь с этой функцией я сделал:

function getlastimage($newkey){
    $arr = $_SESSION['files'];
    $oldkey = array_pop(array_keys($arr));
    $arr[$newkey] = $arr[$oldkey];
    unset($arr[$oldkey]);
    $_SESSION['files'] = $arr;
    $results = end($arr);
    print_r($arr);
}

если я вызываю функцию getlastimage('newkey'), она меняет ключ! Но после того, как я печатаю $ _SESSION, ключ не изменяется? почему это?

Ответы [ 3 ]

2 голосов
/ 20 апреля 2010

Когда вы устанавливаете $arr = $_SESSION['files'], вы фактически делаете копию $_SESSION['files']. Все, что вы делаете для $arr, не сделано для оригинала.

Попробуйте это:

$arr =& $_SESSION['files'];

Обратите внимание на амперсанд после знака равенства. Это сделает $arr ссылкой на $_SESSION['files'], и ваши обновления $arr также затронут $_SESSION['files'], так как они оба ссылаются на один и тот же контент. *

Другое решение, конечно, просто скопировать массив обратно, поставив $_SESSION['files'] = $arr; в конце вашей функции.

1 голос
/ 20 апреля 2010

Ух ты, твой код беспорядок!

1) Вы устанавливаете $_SESSION в новом массиве. Чтобы изменения вступили в силу, вам нужно будет вернуться к исходному массиву $_SESSION, иначе ваш новый массив будет просто забыт.

2) Было бы проще просто array_pop() получить последний элемент и установить его в качестве нового ключа, вместо того, чтобы тратить время на выборку всех ключей и удаление последнего ключа, а затем получить значение из снова массив Старое значение ключа ничего не стоит.

1 голос
/ 20 апреля 2010

попробуйте обновить сессию

$_SESSION['files'] = $arr;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...