我有一些日期变量包含冰岛的月份名称,例如:
$date = '27. júní 2018 04:53';
我想用英语月份名称替换这些月份名称:
$icelandic = array('Janúar', 'Febrúar', 'Mars', 'Apríl', 'Maí', 'Júní', 'Júlí', 'Ágúst', 'September', 'Oktober', 'Nóvember', 'Desember');
或关联数组:
$icelandic = array('Janúar' => '', 'Febrúar' => '', 'Mars' => '', 'Apríl' => '', 'Maí' => '', 'Júní' => '', 'Júlí' => '', 'Ágúst' => '', 'September' => '', 'Oktober' => '', 'Nóvember' => '', 'Desember' => '');
您看到或知道月份名称不是整个单词,但是单词中可能只有3或4个字符。
因此,如果数组中这些值的一部分存在于date变量中,则将其替换为英语月份。
由new DateTime()
处理的情况下,被替换的英语月份可能是整个世界。
所以上面的变量可能是:
$date = '27. june 2018 04:53';
或:
$date = '27. jun 2018 04:53';
更新:
我尝试过的事情:
$icelandic = array('Janúar', 'Febrúar', 'Mars', 'Apríl', 'Maí', 'Júní', 'Júlí', 'Ágúst', 'September', 'Oktober', 'Nóvember', 'Desember');
$english = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
for($i=0; $i < count($icelandic); $i++) {
$date = str_replace($icelandic[$i], $english[$i], $date);
}
或者先使用strpos()
进行支票:
if(strpos($icelandic[$i], $date)){
$date = str_replace($icelandic[$i], $english[$i], $date);
}
我不知道日期格式中英文和冰岛月份的缩写形式。
答案 0 :(得分:1)
代码:(Demo)
$icelandic = array(
'jan' => 'January',
'feb' => 'February',
'mar' => 'March',
'apr' => 'April',
'maí' => 'May',
'jún' => 'June',
'júl' => 'July',
'ágú' => 'August',
'okt' => 'October',
'sep' => 'September',
'nóv' => 'November',
'des' => 'December',
);
$tests = array(
'1. júní 2018 04:53',
'2. Ágú 2018 04:53',
'3. Maí 2018 04:53',
'4. nóvember 2018 04:53',
'5. Des 2018 04:53'
);
foreach ($tests as $test) {
echo "\n$test -> ";
echo preg_replace_callback('~(' . implode('|', array_keys($icelandic)) . ')\pL*~iu', function($m)use($icelandic) {
return $icelandic[mb_strtolower($m[1], 'UTF-8')];
}, $test);
}
输出:
1. júní 2018 04:53 -> 1. June 2018 04:53
2. Ágú 2018 04:53 -> 2. August 2018 04:53
3. Maí 2018 04:53 -> 3. May 2018 04:53
4. nóvember 2018 04:53 -> 4. November 2018 04:53
5. Des 2018 04:53 -> 5. December 2018 04:53
这是逻辑:
您的查找数组必须具有:
preg_replace_callback()
将被使用,因为功能过程将应用于每个匹配项。
该模式由与|
绑定在一起的所有查找键组成(代表OR逻辑)。前三个字符存储在捕获组#1中。可选的结尾字母由\pL*
匹配,i
是“任何字母”的Unicode安全版本。 u
模式修饰符允许不区分大小写的匹配。 $m[1]
修饰符允许Unicode字符匹配。
第一个捕获组($m[0]
)将转换为(多字节安全)小写字母,然后用于从查找数组访问所需值,该数组将替换“全字符串”匹配项(for child in raw_quality:
grade = child.find(class_ = 'grade').get_text()
)这样就不会保留任何原始的冰岛语单词。