用str_replace函数替换数组中的数据

时间:2014-05-08 13:05:05

标签: php arrays str-replace

我有一个名为$data

的数组
$data = array(
                    'word1'=>'Šššš',
                    'word2'=>'Zzzzžzzž',
                    'word3'=>'Āāāa'
                    );

我想要做的是创建具有相同键但具有不同值的新数组,因此我的新数组将如下所示:

$newdata = array(
                    'word1'=>'Ssss',
                    'word2'=>'Zzzzzzzz',
                    'word3'=>'Aaaa'
                    ); 

我想做的就是用变音符号替换字母到普通字母,我搜索了php函数,我已经明白我可以使用str_replace这样的函数:

$search  = array('Ā', 'ā', 'Š', 'š', 'Ž', 'ž');
$replace = array('A', 'a', 'S', 's', 'Ž', ž);
str_replace($search, $replace, $data);

但我如何loop通过array检查并替换值而不触及keys? 或者我不能这样做?(所有数据都必须检查)

6 个答案:

答案 0 :(得分:1)

试试这个

function splReplace($string)
{
    $search  = array('Ā', 'ā', 'Š', 'š', 'Ž', 'ž');
    $replace = array('A', 'a', 'S', 's', 'Ž', ž);
    return str_replace($search, $replace, $string);
}

$data = array(
                'word1'=>'Šššš',
                'word2'=>'Zzzzžzzž',
                'word3'=>'Āāāa'
                );

$data = array_map('splReplace',$data)   ;

答案 1 :(得分:1)

$subject函数的第三个参数str_replace可以是一个数组。所以不需要自己循环遍历这些值。在PHP 5.5上测试,它会保持您的密钥和值保持不变

$search  = array('Ā', 'ā', 'Š', 'š', 'Ž', 'ž');
$replace = array('A', 'a', 'S', 's', 'Z', 'z');

$data = array(
            'word1'=>'Šššš',
            'word2'=>'Zzzzžzzž',
            'word3'=>'Āāāa'
);

$data = str_replace($search, $replace, $data);

答案 2 :(得分:0)

带着简单的foreach

<?php
$search  = array('Ā', 'ā', 'Š', 'š', 'Ž', 'ž');
$replace = array('A', 'a', 'S', 's', 'Ž', ž);
foreach($data as $key => $value){
    $data[$key] = str_replace($search, $replace, $data[$key]);
}
?>

答案 3 :(得分:0)

尝试这样:

 $data = array(
    'word1'=>'Šššš',
    'word2'=>'Zzzzžzzž',
    'word3'=>'Āāāa'
);

$search  = array('Ā', 'ā', 'Š', 'š', 'Ž', 'ž');
$replace = array('A', 'a', 'S', 's', 'Ž', 'ž');
$data2 = array();
foreach($data as $k =>$v){
    $data2[$k] = str_replace($search, $replace, $data[$k]);
}
print_r($data2);

您可以通过以下方式更改foreach中的行:

$data2[$k] = str_replace($search, $replace, $v);

demo

答案 4 :(得分:0)

foreach运作良好

    $data = array(
                'word1'=>'Šššš',
                'word2'=>'Zzzzžzzž',
                'word3'=>'Āāāa'
                );

    $search  = array('Ā', 'ā', 'Š', 'š', 'Ž', 'ž');
    $replace = array('A', 'a', 'S', 's', 'Ž', ž);      

    foreach($data as $k => $v) { // for each element in $data
        $data[$k] = str_replace($search, $replace, $v); // do replacement and assign back to the array.
    }

    print "<pre>"; print_r($data); print "</pre>"; // print formatted array

答案 5 :(得分:0)

要回答您的问题,您可以使用带reference的foreach:

$search  = array('Ā', 'ā', 'Š', 'š');
$replace = array('A', 'a', 'S', 's');
foreach ($data as &$word) {
    $word = str_replace($search, $replace, $word);
}

但是,更简单的方法是使用带有normalizer_normalize的foreach:

foreach ($data as &$word) {
    $word = normalizer_normalize($word);
}

或使用array_map

$data = array_map('normalizer_normalize', $data);

请注意,{5.3}中已将normalizer_normalize添加到核心,但在大多数Linux发行版中,默认情况下它不处于活动状态。

您还可以试用iconv():

foreach ($data as &$word) {
    $word = iconv('UTF-8', 'ASCII//TRANSLIT', $word);
}