通过引用修改数组

Kal*_*zem 6 php mysql arrays reference multidimensional-array

我从我的MySQL数据库收到一个多维数组

Array
(
[0] => Array
    (
        [page] => categorypropose
        [value] => baby-sitters
        [id] => 357960
    )

[1] => Array
    (
        [page] => categorysearch
        [value] => adéquate pour garder
        [id] => 357961
    )
...
)
Run Code Online (Sandbox Code Playgroud)

在这个数组中,我通过'自制'函数"loadtext"进行了一些ISO-8859-1到UTF8的转换.

但是当我这样做时:

    $array = $query->result_array();
    foreach($array as &$k)
    {
        foreach ($k as &$value)
        {
                            //Works
            $value = $this->loadtext($value, 'ISO-8859-1');
        }
    }
     //Back to normal as $this->loadtext never existed
     print_r($array);
Run Code Online (Sandbox Code Playgroud)

它不保存更改(当我回显$ value时,它可以工作,但修改不会保留在最后......)

编辑:这是我必须使用的函数loadtext(实际上,我没有成功,但我必须使用它...)

function loadtext($text,$charset){
    $text = stripslashes($text);
    if($charset!="UTF-8")
        $text = iconv("UTF-8",$charset,$text);
    $text = str_replace(" :"," :",$text);
    $text = str_replace(" ;"," ;",$text);
    $text = str_replace(" !"," !",$text);
    $text = str_replace(" ?"," ?",$text);
    $text = str_replace(" ."," .",$text);
    $text = str_replace(" …"," …",$text);
    return $text;
}
Run Code Online (Sandbox Code Playgroud)

Oko*_*000 6

你可以这样试试:

$array = $query->result_array();
foreach($array as &$k)
{
    foreach ($k as $i => &$value)
    {
                        //Works
        $k[$i] = $this->loadtext($value, 'ISO-8859-1');
    }
}
 //Back to normal as $this->loadtext never existed
 print_r($array);
Run Code Online (Sandbox Code Playgroud)

但更好的是,您可以尝试CONVERT()在查询中使用MySQL函数,以便您获得的字符串已经是UTF8格式.

http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html

至少,使用PHP mb_convert_encoding()而不是自制功能.没有理由重新发明轮子.

http://jp2.php.net/manual/en/function.mb-convert-encoding.php