我有一个像这样的数组
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_array
和preg_match
,但每次最终得到false
结果时,都会导致数组的最后一项(Member forum 9
)覆盖{ {1}}最后一个值(true
)的值。
这是我的尝试。 Moderator forum 8
是上面提到的阵列。
$user_roles
答案 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++;
}