Разделение определенных ключей из массива на две четко определенные группы.Как? - PullRequest
0 голосов
/ 27 марта 2011

Я хотел бы добавить вещи из массива и перевести их. Однако некоторые элементы в массиве я не хочу переводить и поэтому инкапсулирую их в специальные теги. В этом примере я использовал < >, но если у вас есть предложения / лучшие предложения, я открыт для них. Я также думал о { } или [ ] и * *, в зависимости от того, что вы считаете наиболее простым.

<?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 ]

3 голосов
/ 27 марта 2011

Несколько возможных решений:

if (preg_match('~^<.*>$~', $clients[$key]))

if (strlen($clients[$key]) > 0 && $clients[$key][0] == '<' && substr($clients[$key], -1) == '>')
1 голос
/ 27 марта 2011

Возможно, вы хотите снять скобки перед выводом имени.Вы можете использовать это тогда:

// note that you need to test against $clients[ $key ], not $key
if( preg_match( '~^<(.*)>$~', $clients[ $key ], $matches ) )
{
    $randomList .= "• " . $matches[ 1 ] . "<br/>";
}
...