Ответ 1
Как это!
end($array);
$key = key($array);
reset($array);
Как мне изменить последний элемент в массиве?
Массив выглядит следующим образом:
$fields = array("firstName = 'Bob', ",
"lastName = 'Smith', ",
"email = '[email protected]', ",
"address = '123 anystreet', ");
Массив генерируется script, который создает значения и добавляет запятую в конец каждой строки. Я хочу удалить эту запятую/пробел только из последнего элемента в этом массиве. Имейте в виду, что значения могут содержать комбинацию запятой и пространством, поэтому необходимо удалить только последний элемент и последние два символа последнего элемента.
Я просмотрел функцию end()
, но я не думаю, что это поможет, поскольку она просто получает значение.
Изменить Хорошо, поэтому я создал эту функцию/массив, чтобы у меня была только одна функция mysql для обновления пользователей. Как функция обнаружения изменений, и она возвращает только требуемые/измененные поля. Я не понимал, что есть проблемы, связанные с этим подходом. Я думал, что, поскольку у меня уже были запросы mysql, написанные в моих старых функциях, не должно быть проблем с этим путем. Файл, который он не будет доступен для публики. Я собираюсь использовать лучший ответ, который работает для меня, но я буду искать, почему это проблематично, и я буду благодарен за комментарии/ссылки относительно того, что не так с этим подходом. Спасибо.
Как это!
end($array);
$key = key($array);
reset($array);
Там сокращенный способ сделать это, но легче следовать, если он разбился на части:
$index = count( $fields ) - 1;
$value = $fields[$index];
$fields[$index] = preg_replace( "/,\ $/", "", $value );
Чтобы изменить значение последнего числового элемента:
$lastValue = array_pop($fields);
$fields[] = rtrim(', ',$lastValue);
Если вы готовите эти значения для запроса, я бы предложил сохранить все без запятых в массиве, а затем вызвать implode в этом массиве, когда это необходимо, чтобы предотвратить проблемы с запятой.
наткнулся на это сегодня. я думаю, что самый простой способ, не связанный с указателем:
array_splice($array, -1, 1, strtolower(end(array_values($array))).'blah' );
конечно, вы можете удалить array_values, если вам не нужно заботиться о указателе. но мне интересно, если это хороший способ, так как извлечение-n-replace-stuff сплайсинга может быть более требовательным, чем поп или sth?
Существует несколько способов:
1) Для ассоциативных массивов, если вы не знаете последний ключ элемента, лучше сначала найти последний ключ элемента и изменить его значение.
$array[end((array_keys($array)))] .= ' additional text';
2), если вы не знаете и не заботитесь о ключах, вы можете вырезать последний элемент и создать новый.
$array[] = array_pop($array).' additional text';
Попытка и толчок массива - самый простой способ сделать это для базовых массивов. (Я знаю, что это не технически вопрос, но многие люди придут сюда искать ответ в отношении простых массивов).
<?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];
?>
Я думаю, что функция PHP Implode может быть хорошей альтернативой, вместо того, чтобы генерировать запятые самостоятельно.
Если вы не согласны с этим, вам нужно будет использовать что-то вроде:
$lastfield = $fields[count($fields)-1];
$lastfield = str_split($lastfield,strlen($lastfield)-2);
$fields[count($fields)-1] = $lastfield;
Первая и третья строки включены для облегчения чтения второй строки, но это может быть легко увязано с одной строкой.