Заметки о PHP: изменение кодировки массива
Иногда бывает так, что мы получаем массив, в котором элементы имеют кодировку, которая нам без надобности. Необходимо преобразовать все элементы массива в нужную нам кодировку. Когда массив одномерный – это не составляет труда. Но когда мы имеем многомерный массив, могут возникнуть трудности – нам ведь надо опускаться на неопределенную глубину. Следующая маленькая функция решит эту тривиальную задачу:
function iconvArray($inputArray,$newEncoding){
$outputArray=array();
if ($newEncoding!=''){
if (!empty($inputArray)){
foreach ($inputArray as $element){
if (!is_array($element)){
$element=iconv(mb_detect_encoding($element),
$newEncoding,$element);
} else {
$element=$this->iconvArray($element);
}
$outputArray[]=$element;
}
}
}
return $outputArray;
}
Просто и… рекурсивно
Спасибо вам за добавление статьи в:
Комментариев: 3 »
RSS-фид комментариев для этого поста | Трекбек
Оставить комментарий
Позволю себе немного отредактировать (справить) твою функцию:
function iconvArray($inputArray,$newEncoding){
$outputArray=array();
if ($newEncoding!=”){
if (!empty($inputArray)){
foreach ($inputArray as $key => $element){
if (!is_array($element)){
$element=iconv($newEncoding,mb_detect_encoding($element),$element);
} else {
$element=$this->iconvArray($element, $newEncoding);
}
$outputArray[$key]=$element;
}
}
}
return $outputArray;
}
Согласен, моя функция была написана для простых, но не ассоциативных массивов. Мне уже довелось ее переписать, когда я при разработке получал ассоциативный массив. Твою функцию, кстати, можно дополнить изменением кодировки в ключе, т.к. в ассоциативных массивах можно задавать ключи, состоящие из национальных символов (н-р, кириллицы), и, конечно же, рано или поздно, придется столкнуться с такими массивами.
Там есть еще пару чисто технических ошибочек, в “iconv” и рекурсивном вызове функции. А вообще ты прав что ключики нужно тоже декодировать.
Peace.