Подтвердить что ты не робот

Измените последний элемент в массиве

Как мне изменить последний элемент в массиве?

Массив выглядит следующим образом:

$fields = array("firstName = 'Bob', ",
                "lastName = 'Smith', ",
                "email = '[email protected]', ",
                "address = '123 anystreet', ");

Массив генерируется script, который создает значения и добавляет запятую в конец каждой строки. Я хочу удалить эту запятую/пробел только из последнего элемента в этом массиве. Имейте в виду, что значения могут содержать комбинацию запятой и пространством, поэтому необходимо удалить только последний элемент и последние два символа последнего элемента.

Я просмотрел функцию end(), но я не думаю, что это поможет, поскольку она просто получает значение.

Изменить Хорошо, поэтому я создал эту функцию/массив, чтобы у меня была только одна функция mysql для обновления пользователей. Как функция обнаружения изменений, и она возвращает только требуемые/измененные поля. Я не понимал, что есть проблемы, связанные с этим подходом. Я думал, что, поскольку у меня уже были запросы mysql, написанные в моих старых функциях, не должно быть проблем с этим путем. Файл, который он не будет доступен для публики. Я собираюсь использовать лучший ответ, который работает для меня, но я буду искать, почему это проблематично, и я буду благодарен за комментарии/ссылки относительно того, что не так с этим подходом. Спасибо.

4b9b3361

Ответ 1

Как это!

end($array);
$key = key($array);
reset($array);

Ответ 2

Там сокращенный способ сделать это, но легче следовать, если он разбился на части:

$index = count( $fields ) - 1;
$value = $fields[$index];
$fields[$index] = preg_replace( "/,\ $/", "", $value );

Ответ 3

Чтобы изменить значение последнего числового элемента:

$lastValue = array_pop($fields);
$fields[] = rtrim(', ',$lastValue);

Если вы готовите эти значения для запроса, я бы предложил сохранить все без запятых в массиве, а затем вызвать implode в этом массиве, когда это необходимо, чтобы предотвратить проблемы с запятой.

Ответ 4

наткнулся на это сегодня. я думаю, что самый простой способ, не связанный с указателем:

array_splice($array, -1, 1, strtolower(end(array_values($array))).'blah' );

конечно, вы можете удалить array_values, если вам не нужно заботиться о указателе. но мне интересно, если это хороший способ, так как извлечение-n-replace-stuff сплайсинга может быть более требовательным, чем поп или sth?

Ответ 5

Существует несколько способов:

1) Для ассоциативных массивов, если вы не знаете последний ключ элемента, лучше сначала найти последний ключ элемента и изменить его значение.

$array[end((array_keys($array)))] .= ' additional text';

2), если вы не знаете и не заботитесь о ключах, вы можете вырезать последний элемент и создать новый.

$array[] = array_pop($array).' additional text';

Ответ 6

Попытка и толчок массива - самый простой способ сделать это для базовых массивов. (Я знаю, что это не технически вопрос, но многие люди придут сюда искать ответ в отношении простых массивов).

<?php

function update_last(&$array, $value){
    array_pop($array);
    array_push($array, $value);     
}

?>

Затем вы можете использовать эту функцию следующим образом:

<?php

$array = [1,2,3];

update_last($array, 4); //$array = [1,2,4];

?>

Ответ 7

Я думаю, что функция PHP Implode может быть хорошей альтернативой, вместо того, чтобы генерировать запятые самостоятельно.

Если вы не согласны с этим, вам нужно будет использовать что-то вроде:

$lastfield = $fields[count($fields)-1];
$lastfield = str_split($lastfield,strlen($lastfield)-2);
$fields[count($fields)-1] = $lastfield;

Первая и третья строки включены для облегчения чтения второй строки, но это может быть легко увязано с одной строкой.