Окт
16
2009

Заметки о 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;
}

Просто и… рекурсивно ;)


Спасибо вам за добавление статьи в:
Автор опуса: Олег | Категория: php

Комментариев: 3 »

  • Артём пишет:

    Позволю себе немного отредактировать (справить) твою функцию:

    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.

RSS-фид комментариев для этого поста | Трекбек


Оставить комментарий

* Необходимые для заполнения поля
Before you submit form:
Human test by Not Captcha

 

Шаблон: TheBuckmaker.com | Локализация, модификация: Олежек | Хостинг: Bluehost.com