PHP. Удалить из массива определенные ключи

Каким способом можно удалить из массива элементы ключ которых содержит определенный префикс, к примеру "_ru", либо же "_en"?

Пример:

title_en   => '',
title_ru   => '',
section_en => '',
section_ru => ''

Каким способом можно удалить из массива все элементы с ключом '_en', либо '_ru'?


Ответы (2 шт):

Автор решения: Graf_Men

Можно средствами PHP сгруппировать данные. Что имеется ввиду. Берём и разбиваем строку-ключ через функцию explode. Далее, если структура у всех ключей будет такой, как описана в вопросе, то мы знаем что результатом explode('_', $key) будет массив из 2 элементов. В первом будет лежать, например, title, а во-втором будет лежать уже ключ-локаль. Мы можем в новый результирующий массив положить наше текущее значение: $data[$keyLocale][$keyValue] = $value; получается примерно следующее: $data['en']['title'] = '';.

Примерный исходный код будет выглядеть следующим образом:

function groupData(array $arr, string $separate = '_'): array
{
    $data = [];

    foreach($arr as $key => $value) {
        list($keyValue, $keyLocale) = explode($separate, $key);
        $data[$keyLocale][$keyValue] = $value;
    }

    return $data;
}
→ Ссылка
Автор решения: Vincent

Функция удаляет из массива элементы, ключи которых содержат подстроку '_en' или '_ru'

function changeArr($array)
{
    foreach ($array as $key => $value) {
        if (preg_match('/_en|_ru/', $key)) {
            unset($array[$key]);
        }
    }
    return $array;
}
→ Ссылка