PHP5.4.7でstdClassをArrayに変換した時に詰まったこと


タグの環境にてページネーションを実装中に現象。
https://gist.github.com/mitukiii/917075
こちらのロジックを使用させて頂きました。

$array = stdClassToArray($results);    // resultsにはSQLをページネーションした形で取得したstdClass objectが入っている
$page = array(
            'current' => $array['currentPage'],
            'perpage' => $array['perPage'],
            'last' => $array['lastPage'],
            'total' => $array['total']
        );

としたところ

Undefined index: currentPage

なんぞ?
と$arrayの中身のダンプを取ってみたところ

何か化けてる…?
取りあえず全ソースファイルの文字コードをUTF-8に強制変換かけてみるも効果無し。
仕方ないので文字をヘキサ表示してみる

var_dump(bin2hex($key));

おぉ…null文字が混入している。
null*nullになっている意味が正直分かりませんが取りあえずnullをどうにかしてあげるといいということですね。

$key = str_replace('@', '', $key);

これを

$key = str_replace("\x00", "", str_replace('@', '', $key));

こうするとcurrentPageのところが

こうなって取りあえず文字化けは解消しました。
アスタリスクは…正直どうにもなりませんね。
コントローラー側で

        $array = stdClassToArray($results);
        $page = array(
            'current' => $array['*currentPage'],
            'perpage' => $array['*perPage'],
            'last' => $array['*lastPage'],
            'total' => $array['*total']
        );

アスタリスク足して指定してやることでちゃんととれました。
View(Smarty)側への受け渡しはいつも通りで。