PHP7.2からmb_convert_encoding()で配列がサポートされていた

PHP7.2からmb_convert_encoding()で配列がサポートされていた

PHP7.2からmb_convert_encoding()で配列がサポートされていました。

PHP: mb_convert_encoding – Manual

<?php
$arr = mb_convert_encoding($arr, 'UTF-8', 'ASCII, JIS, UTF-8, SJIS');

勿論、連想配列にも対応しており配列のキーの文字化けも修正してくれます。

PHP<=7.1までは、文字列しか対応しておらず、mb_convert_variables()を使用するか以下のようなヘルパー関数を作成しないと行けなかったのでかなり楽になりますし、組み込み関数を使用すれば処理速度も上がっていい感じです。

<?php
function convertToUTF8($data) {
    if (!is_array($data)) {
        return  mb_convert_encoding($data, 'UTF-8', 'UTF-8, SJIS-win, SJIS, ASCII');
    }

    foreach ($data as $key => $value) {
        $reKey = mb_convert_encoding($key, 'UTF-8', 'UTF-8, SJIS-win, SJIS, ASCII');
        unset($data[$key]);
        $data[$reKey] = convertToUTF8($value);
    }

    return $data;
}