将某些键从一个数组分成两个明显不同的组。怎么样?

时间:2011-03-27 08:43:04

标签: php arrays foreach key

我想从数组中添加内容并翻译它们。但是,数组中的一些项目我不想翻译,因此将它们封装到特殊标记中。在这个例子中,我使用< >,但如果你有建议/更好的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语句完成?
换句话说,编程代码中的逻辑是什么,它可以匹配数组中的项是不应该被翻译和处理不同的特殊单词之一?

2 个答案:

答案 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/>";
}