有没有比使用foreach更快的方法将函数应用于多维数组中的所有字符串?(PHP)


Is there a faster way to apply a function to all the strings within a multidimensional array than using foreach? (PHP)

这是我的迭代:

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上的map或类似的函数?

我认为http://php.net/manual/en/function.array-walk-recursive.php会做你想做的事吗?

array_walk_recurive()类似于array_walk(),应用您的函数,但它是在多维/递归的意义上实现的——基本上它按照名称所说的去做!

由于你有一些逻辑,你必须编写自己的函数,包括比较和结果返回值,然后将该函数传递给array_walk_recurive()函数(或者根据你的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;
    }
});