mb_convert_variables *RECURSION*
PHPのmb_convert_variables関数がうまく動かないケースがあったので記録しておく。
<?php
$a = ['あいうえお', 'かきくけこ'];
$b = [];
while ($tmp = array_shift($a)) {
$b[0][] = $tmp;
}
mb_convert_variables('EUC-JP', 'UTF-8', $b);
header('Content-Type: text/html; charset=euc-jp');
var_dump($b);
結果(PHP7.4)
array(1) {
[0]=>
array(2) {
[0]=>
string(10) "あいうえお"
[1]=>
string(10) "かきくけこ"
}
}
結果(PHP7.0)
array(1) {
[0]=>
*RECURSION*
}
6行目が
$b[0][] = $tmp;
でなく
$b[] = $tmp;
なら問題なく動く。
array_shiftじゃなくてmysqli_fetch_assocとかでも同じ問題が発生する。
原因はよく分からない。バージョン依存かどうかも不明。
対策としては、6行目で代入する前にmb_convert_variablesを使うようにすればいい。
関係があるかもしれない記事(外部リンク)
mb_convert_variables関数における、Cannot handle recursive references in ...のエラーについて