За последние 24 часа нас посетили 17865 программистов и 1715 роботов. Сейчас ищет 961 программист ...

iconv - для всего массива???

Тема в разделе "PHP для новичков", создана пользователем Panter7777, 20 янв 2011.

  1. Panter7777

    Panter7777 Активный пользователь

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    Всем добрый день!
    Есть массив в котором много значений.
    что бы каждое отдельно не делать может есть способ зразу весь массив перекодировать:

    while($array = mysql_fetch_array($query)){

    $array['user'] = iconv("UTF-8", "CP1251", $array['user']);
    $array['user2'] = iconv("UTF-8", "CP1251", $array['user2']);
    ...... и тд

    может так:
    $array = iconv("UTF-8", "CP1251", $array); //не работает
    $array[] = iconv("UTF-8", "CP1251", $array[]);// тоже не работает

    Как можно???
     
  2. Jampire

    Jampire Активный пользователь

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    А не проще ли сделать так, что бы в базе сразу хранились данные в нужной кодировке?
     
  3. Panter7777

    Panter7777 Активный пользователь

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    Нет потому как нужен только один модуль использующий CP1251, а все остальное в UTF-8 (остального много)
     
  4. Carella

    Carella Активный пользователь

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    Проще мне кажется сделать так. Сделать дамп БД, внешней прогой сконвертить его как надо (например штирлицем) и залить дамп в БД.
     
  5. Panter7777

    Panter7777 Активный пользователь

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    нееее, это все гемор еще больше чем все переменные один раз прописать в iconv!!
     
  6. asik

    asik Активный пользователь

    С нами с:
    12 июл 2007
    Сообщения:
    211
    Симпатии:
    0
    PHP:
    1.  
    2. <?php
    3. function conv($n) {
    4.     return iconv("UTF-8", "CP1251",$n)
    5. }
    6. $b = array_map("conv", $array);
    7.  
    8.  
     
  7. asik

    asik Активный пользователь

    С нами с:
    12 июл 2007
    Сообщения:
    211
    Симпатии:
    0
    PHP:
    1.  
    2. <?php
    3. foreach ($array as $key => $value)
    4. {
    5.   $array[$key] = iconv("UTF-8", "CP1251",$value)
    6. }
    7.  
    8.  
     
  8. Panter7777

    Panter7777 Активный пользователь

    С нами с:
    10 окт 2010
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Киев
    asik
    Респект, спасибо!
     
  9. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
  10. asik

    asik Активный пользователь

    С нами с:
    12 июл 2007
    Сообщения:
    211
    Симпатии:
    0
    тут уже нужно смотреть по быстродействию, и нагруженности проекта... Длинные тразакцие тоже бэд
     
  11. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    PHP:
    1. <?php
    2. function deepIconv($from, $to, $sbj){
    3.         if (is_array($sbj) || is_object($sbj)){
    4.             foreach ($sbj as &$val){
    5.                 $val= deepIconv($from, $to, $val);
    6.             }
    7.             return $sbj;
    8.         }else{
    9.             return iconv($from, $to, $sbj);
    10.         }
    11.     }
     
  12. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Не нужно, разница будет в 0.001% в лучшем случае, а вот "логичность" кода (и как следствие гибкость/простота/итд) будет разная.
     
  13. alechka

    alechka Активный пользователь

    С нами с:
    5 июл 2012
    Сообщения:
    1
    Симпатии:
    0
    Код (Text):
    1. function IconvArray(&$array){
    2.     foreach ($array as $key => $value){
    3.         if(is_array($value)){
    4.             IconvArray($array[$key]);
    5.         }else{
    6.             $array[$key] = iconv('windows-1251', 'UTF-8', $value);
    7.         }
    8.     }
    9. }
     
  14. baracuda

    baracuda Активный пользователь

    С нами с:
    6 июл 2012
    Сообщения:
    1
    Симпатии:
    0
    Код (Text):
    1.  
    2. array_walk_recursive($array, function(&$value,$key){
    3.    $value=iconv("UTF-8","CP1251",$value);
    4. });