Моя цель - удалить группу символов из ключей одномерного массива и другую группу символов из значений этого же массива.Пример:
$arr = [
'a' => 'Letter A!',
'`b`' => 'Letter B w/quotes...',
' c ' => 'Letter C w/spaces?',
' -_-`d`- _ - ' => 'Letter D w/all?!...'
];
$invalid_keys_chars = ['`',' ','_','-'];
$invalid_vals_chars = ['!','?','.'];
// GOAL: looking for something like this function
array_del_invalid($arr, $invalid_keys_chars, $invalid_vals_chars));
var_export($arr);
// ---> output
// array (
// 'a' => 'Letter A',
// 'b' => 'Letter B w/quotes',
// 'c' => 'Letter C w/spaces',
// 'd' => 'Letter D w/all'
// )
Сначала я посмотрел общие функции PHP:
array_walk
пример : разрешает замену значений по ссылке, но если ятакже передать ключ по ссылке в параметрах обратного вызова, то же самое не происходит; array_replace
: ключи также не изменены; array_map
пример : создание копии массива, но необходима предварительная обработка array_keys($arr)
.
Поэтому моя цель - выполнить все замены за один раз, избегая повторного использования функций PHP, которыезацикливать массив несколько раз.
Я поместил ответ в этот же поток с моей попыткой, которая работает, но я не мог найти способ избежать unset($arr[$invalid_key])
(естьесть ли другой способ «изменить» сам ключ, не удаляя его?) или выполнить только одно присваивание, если строки ключа и значения нуждаются в замене.
Есть ли уже функция PHP, которая делает это?Т.е. однопетлевое, мало условий, минимум замен и в целом более эффективно?Если нет, как я могу улучшить мой?