我有一个名为$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
?
或者我不能这样做?(所有数据都必须检查)
答案 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);
答案 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);
}