检查字符串末尾是否存在任何数组值

时间:2011-06-05 15:03:40

标签: php arrays if-statement compare

我正在尝试测试一个字符串是否由多个单词组成,并且在结尾处有一个数组中的任何值。以下是我到目前为止的情况。我被困在如何检查字符串是否比正在测试的数组值更长并且它是否存在于字符串的末尾。

$words = trim(preg_replace('/\s+/',' ', $string));
$words = explode(' ', $words);
$words = count($words);

if ($words > 2) {
    // Check if $string ends with any of the following
    $test_array = array();
    $test_array[0] = 'Wizard';
    $test_array[1] = 'Wizard?';
    $test_array[2] = '/Wizard';
    $test_array[4] = '/Wizard?';

    // Stuck here
    if ($string is longer than $test_array and $test_array is found at the end of the string) {
      Do stuff;
    }
}

3 个答案:

答案 0 :(得分:2)

字符串结束时你的意思是最后一个字吗?你可以使用preg_match

preg_match('~/?Wizard\??$~', $string, $matches);
echo "<pre>".print_r($matches, true)."</pre>";

答案 1 :(得分:2)

我想你想要这样的东西:

if (preg_match('/\/?Wizard\??$/', $string)) { // ...

如果它必须是一个任意数组(而不是包含你在问题中提供的'向导'字符串的数组),你可以动态构造正则表达式:

$words = array('wizard', 'test');
foreach ($words as &$word) {
    $word = preg_quote($word, '/');
}
$regex = '/(' . implode('|', $words) . ')$/';
if (preg_match($regex, $string)) { // ends with 'wizard' or 'test'

答案 2 :(得分:0)

这是你想要的(无法保证正确性,无法测试)?

foreach( $test_array as $testString ) {
  $searchLength = strlen( $testString );
  $sourceLength = strlen( $string );

  if( $sourceLength <= $searchLength && substr( $string, $sourceLength - $searchLength ) == $testString ) {
    // ...
  }
}

我想知道一些正则表达式在这里是否会更有意义。