PHP Strposa匹配双位和三位数的单位数

时间:2016-03-23 22:12:45

标签: php arrays

如果在数组中找到匹配项,我正在尝试使用strposa来停止使用continue的循环的一部分。问题是它是否在代码中找到了对数字的任何引用,而不是匹配实际的输入。

即。如果它在6中找到163则会停止。反正有没有具体说明。

function strposa($haystack, $needle, $offset = 0) {
    if (!is_array($needle)) {
        $needle = array($needle);
    }
    foreach ($needle as $query) {
        if (stripos($haystack, $query, $offset) !== false) {
            return true; // stop on first true result
        }
    }
    return false;
}


$StaffGroups = array (0 => '76', '6', '13', '16', '154', '69');

$ServerGroups = explode(",", $Info['client_servergroups']);

if (strposa($ServerGroups, $StaffGroups, 1)) {
    echo "User is staff";
    Continue;
} else {
    echo "User is not staff";
}

完成后,数组看起来像这样:

$StaffGroups( [0] => 76 [1] => 6 [2] => 13 [3] => 16 [4] => 154 [5] => 69 ) 
$ServerGroups ( [0] => 69 [1] => 163 )

感谢任何帮助,真的卡住了!抱歉,如果我已经回答了已经回答的问题,但我想不出一个寻找这个问题的好方法。

3 个答案:

答案 0 :(得分:1)

您似乎很难确定给定的needle是否存在给定的haystack。在这种情况下,您的haystack是人员组,而针是服务器组的每个元素。您可以完全摆脱自定义函数并使用in_array

$StaffGroups = array (0 => '76', '6', '13', '16', '154', '69');
$ServerGroups = explode(",", $Info['client_servergroups']);

foreach ($ServerGroups as $user => $user_id) {
  if (in_array($user_id, $StaffGroups)) {
    echo "User is staff";
  } else {
    echo "User is not staff";
  }
}

对于$ServerGroups中的每个元素,您检查它是否存在于$StaffGroups中并打印相应的消息。

答案 1 :(得分:0)

如果您想匹配确切的数字,则需要使用==而不是使用stripos。例如:

function strposa($haystack, $needle, $offset = 0) {
    if (!is_array($needle)) {
        $needle = array($needle);
    }
    foreach ($needle as $query) {
        if ( $haystack == $query) {
            return true; // stop on first true result
        }
    }
    return false;
}

答案 2 :(得分:0)

您正在寻找两个数组中的常用值,这是array_intersect()的用途:

<?php
$StaffGroups = array(76,6,13,16,154,69); 
$ServerGroups = array(69,163);

function userIsStaff($ServerGroups, $StaffGroups) {
  $common = array_intersect($ServerGroups, $StaffGroups);
  return count($common) > 0;
}

if (userIsStaff($ServerGroups, $StaffGroups, 1)) {
    echo "User is staff";
} else {
    echo "User is not staff";
}

但我不理解你的参数$offset的含义......