我想从数组中添加内容并翻译它们。但是,数组中的一些项目我不想翻译,因此将它们封装到特殊标记中。在这个例子中,我使用<
>
,但如果你有建议/更好的iead,我会对他们开放。我还想到了{
}
或[
]
和*
*
,无论您认为哪个最简单。
<?php
# define the contents of my all time clients
$clients = array('<UNESCO>', 'Vrije Universiteit medical center');
# randomization engine
$keys = array_rand($clients, 3); // get 3 random keys from your array
foreach ($keys as $key) { // cycle through the keys to get the values
# if this item is inbetween < > tags..
if #??#######??########??#########??########??##
# then put this item directly into randomList without translation
$randomList .= "• " . $clients[$key]) . "<br/>"; // WORKS
# all other items without <tags> are first translated via __() then added
else $randomList .= "• " . __($clients[$key]) . "<br/>"; // WORKS
}?>
问题:第10行应该使IF语句完成?
换句话说,编程代码中的逻辑是什么,它可以匹配数组中的项是不应该被翻译和处理不同的特殊单词之一?
答案 0 :(得分:3)
几种可能的解决方案:
if (preg_match('~^<.*>$~', $clients[$key]))
if (strlen($clients[$key]) > 0 && $clients[$key][0] == '<' && substr($clients[$key], -1) == '>')
答案 1 :(得分:1)
您可能希望在输出名称之前抛弃括号。你可以使用它:
// note that you need to test against $clients[ $key ], not $key
if( preg_match( '~^<(.*)>$~', $clients[ $key ], $matches ) )
{
$randomList .= "• " . $matches[ 1 ] . "<br/>";
}