Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Рекурсивный обход массива..


Автор: Resident 25.8.2008, 03:41
Доброго времени суток! Возникла передо мной следующая задача:

Нужна функция рекурсивного обхода массива и применения функции к каждому элементу массива, если он не является массивом. Т.е. если проще, то нужно перекодировать все данные в массиве из одно кодировки в другую. Массив может быть как одномерный так и многомерный. С одномерным все понятно, но как поступить с многомерным массивом?

Автор: Resident 25.8.2008, 04:24
Сам буквально через несколько минут всетаки справился со своей задачей. Все на самом деле оказалось очень просто:

Код

function iconv_array($inCharset, $outCharset, $inArray) {
    if ( empty($inArray) || !is_array($inArray) ) {
        return false;
    }
    
    $outArray = array();
    
    foreach ( $inArray as $key => $value ) {
        if ( is_array($value) ) {
          $outArray[$key] = iconv_array($inCharset, $outCharset, $value);
        } else {
            $outArray[$key] = iconv($inCharset, $outCharset, $value);
        }
    }
    
    return $outArray;
}

Автор: krundetz 25.8.2008, 08:55
Resident, в PHP существует такая вещь как RecursiveIteratorIterator как раз предназначена для рекурсивного обхода коллекций элементов, каковой может выступать и многомерный массив.

Автор: skyboy 25.8.2008, 09:23
именно для выполнения подобного рода задач и предназначена функция http://php.net/array_walk_recursive

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)