如果在数组中找到匹配项,我正在尝试使用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 )
感谢任何帮助,真的卡住了!抱歉,如果我已经回答了已经回答的问题,但我想不出一个寻找这个问题的好方法。
答案 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
的含义......