这是我的迭代:
foreach ($this->itens as $i => $i_val) {
foreach ($i_val as $j => $j_val) {
if (is_string($this->itens[$i]->$j)) {
$this->itens[$i]->$j = iconv(mb_detect_encoding($this->itens[$i]->$j, mb_detect_order(), true), "UTF-8", $this->itens[$i]->$j);
}
}
}
每次从数据库加载某些内容时,这种运行方式太过于性能杀戮,而且由于之前的程序员使用多个随机编码来拧紧数据库,因此非常必要。无论如何,有没有更快的方法在PHP中执行此操作?传统的while循环比foreach更快?是否有一个函数可以将函数应用于所有内部内容,例如Python或类似的地图?
答案 0 :(得分:0)
我认为http://php.net/manual/en/function.array-walk-recursive.php会做你想做的事情吗?
array_walk_recursive()类似于array_walk(),应用你的函数,但它是以多维/递归的方式进行的 - 基本上它就是名字所说的!
由于你在那里有一些逻辑,你必须编写自己的函数,包括比较和结果返回值,然后将该函数传递给array_walk_recursive()函数(或者根据您的PHP版本,您可以将其编写为匿名函数):
$this->itens = array_walk_recursive($this->itens,function($param,$key){
if (is_string($param)) {
return iconv(mb_detect_encoding($param, mb_detect_order(), true), "UTF-8", $param);
}else{
return $param;
}
});