当项目出现在数组中时停止脚本

时间:2012-01-12 10:05:32

标签: php arrays

我有一个像这样的数组

array
  2 => string 'Member forum 1'
  5 => string 'Member forum 5'
  8 => string 'Moderator forum 8'
  9 => string 'Member forum 9'

我想编写一个脚本,一旦它到达Moderator - 标签,就停止查找标签并继续使用包含true或类似内容的变量,我可以告诉它user是任何形式的普通会员的主持人。

我一直在尝试使用in_arraypreg_match,但每次最终得到false结果时,都会导致数组的最后一项(Member forum 9)覆盖{ {1}}最后一个值(true)的值。

这是我的尝试。 Moderator forum 8是上面提到的阵列。

$user_roles

3 个答案:

答案 0 :(得分:1)

尝试这样的事情?

$arr = array(...);
$found = false;
foreach($arr as $item)
{
    if( stripos($item, 'moderator') !== false)
    {
        $found = $item;
        break;
    }
}

if($found)
{
    //$found is the word.
}

如果可能有多于1个匹配,则必须处理每场比赛:

foreach($arr as $item)
{
    if( stripos($item, 'moderator') !== false)
    {
        $roles = explode(' ',trim($item));
        $role = trim(strtolower($roles[0]));
        switch($role)
        {
             case 'moderator': 
                  //do something
                  break;
             case 'moderator1':
                  //another thing
                  break;
             case ....
        }       
    }
}

答案 1 :(得分:1)

这个怎么样?无论如何,它比其他答案更通用:

<?php
$user_roles = array(
    2 => 'Member forum 1',
    5 => 'Member forum 5',
    8 => 'Moderator forum 8',
    9 => 'Member forum 9'
);


function contains( $string, array $roles ) {
    foreach( $roles as $key => $value ) {
        if( stripos( $value, $string ) !== false ) {
            return true;
        }
    }
    return false;
}

$moderator = contains( 'moderator', $user_roles );
$redacteur = contains( 'redacteur', $user_roles );

var_dump( $moderator, $redacteur ); // true, false.

附录:至于你的preg_match不起作用的原因:它没有任何分隔符,但总是应该使用正则表达式。所以这个例子应该有效:

<?php
$string = 'Moderator forum 8';
if( 0 !== preg_match( '~moderator~i', $string ) ) { // ~ is the delimiter.
    echo "Moderator found.";
}

我仍然同意另一个观点,即stripos更适合这种场合。

答案 2 :(得分:0)

试试这个,$arr是你的数组:

$iFailSafe = 1;
$iNumValues= count($arr);
while($found == false)
    $value = current($arr);        
    if(stripos("moderator",$value) !== false){
      $found = true;
      $userId = key($arr);
    }
    if($iFailSafe == $iNumValues) $found = true;
    next($arr);
    $iFailSafe++;
}