PHP. Удалить из массива определенные ключи
Каким способом можно удалить из массива элементы ключ которых содержит определенный префикс, к примеру "_ru", либо же "_en"?
Пример:
title_en => '',
title_ru => '',
section_en => '',
section_ru => ''
Каким способом можно удалить из массива все элементы с ключом '_en', либо '_ru'?
Ответы (2 шт):
Можно средствами 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;
}
Функция удаляет из массива элементы, ключи которых содержат подстроку '_en' или '_ru'
function changeArr($array)
{
foreach ($array as $key => $value) {
if (preg_match('/_en|_ru/', $key)) {
unset($array[$key]);
}
}
return $array;
}