在PHP中查找数组项

在PHP中查找数组项,php,arrays,output,Php,Arrays,Output,我已经变成了代码盲,不知道如何获得以所需格式输出值所需的结果 我在一个内部网站上有一个搜索功能,可以根据多个字符串查询MSSQL。例如,如果用户输入“CCENT MCSE”,查询将返回所有具有认证的用户 为了清楚起见,这将返回所有拥有CCENT CERFIFITE或MCSE的用户 我的老板现在想通过使用运算符(+)符号将其更改为和,因此当用户输入“CCENT+MCSE”时,查询应返回具有CCENT和MCSE证书的用户 我构建查询的方法是将搜索字符串分解为一个数组,该数组引用+号作为分隔符 我的S

我已经变成了代码盲,不知道如何获得以所需格式输出值所需的结果

我在一个内部网站上有一个搜索功能,可以根据多个字符串查询MSSQL。例如,如果用户输入“CCENT MCSE”,查询将返回所有具有认证的用户

为了清楚起见,这将返回所有拥有CCENT CERFIFITE或MCSE的用户

我的老板现在想通过使用运算符(+)符号将其更改为和,因此当用户输入“CCENT+MCSE”时,查询应返回具有CCENT和MCSE证书的用户

我构建查询的方法是将搜索字符串分解为一个数组,该数组引用+号作为分隔符

我的SQL语句返回以下结果

Array
(
[0] => Array
    (
        [username] => mshort
        [fname] => Matthew
        [lname] => Short
        [location_name] => CENTRAL REMOTE
        [grade_name] => E6
        [skill_name] => CCENT
    )

[1] => Array
    (
        [username] => mark.parry
        [fname] => Mark
        [lname] => Parry
        [location_name] => CENTRAL OFFICE
        [grade_name] => E4
        [skill_name] => MCSE Messaging
    )

[2] => Array
    (
        [username] => mark.parry
        [fname] => Mark
        [lname] => Parry
        [location_name] => CENTRAL OFFICE
        [grade_name] => E4
        [skill_name] => CCENT
    )

)
在这种情况下需要发生的是,我需要只显示同时具有CCENT和MCSE的唯一用户,并丢弃仅具有其中一个的用户

在上面的例子中,我只需要输出MarkParry和discard Matthew Short

我不知道怎么做。请问你能帮忙吗

谢谢

SQL语句

SELECT username,fname,lname,el.location_name, eg.grade_name,el.location_name
,sl.skill_nameFROM engineer e 
INNER JOIN engineer_skills es ON e.id=es.engineer_id INNER JOIN skills_list sl ON    es.skill_id=sl.id 
INNER JOIN engineer_grades eg ON e.grade=eg.id 
INNER JOIN    engineer_location el ON e.location=el.id INNER JOIN team t ON e.team=t.id
WHERE e.id > 0 AND '.$sql_where.' ORDER BY lname' 
$sql\u这是哪里 sl.skill_名称,如“%”“$search[$i]。“%”或


我去掉最后一个或

可以过滤数组(假设它是names
$data

首先,通过用户名模拟组

$result = array();
foreach($data as $item) {
  if(!isset($result[$item["username"]])) $result[$item["username"]] = $item;
  else $result[$item["username"]]["skill_name"].="+".$item["skill_name"];
}
第二,过滤结果

$filter = array("CCENT","MCSE");
function skill_and_filter($item) {
  global $filter;
  foreach($filter as $f) if(strpos($item["skill_name"],$f)===false) return false;
  return true;
}

$result = array_filter($result,"skill_and_filter");

查询是什么样子的?为什么不在值周围使用引号呢?这将有助于显示您的表结构和您正在生成的SQL。然后尝试处理结果,只需将查询更改为
。我的SQL语句是“选择用户名、fname、lname、el.location\u名称,例如grade\u名称、el.location\u名称,sl.skill\U工程师姓名e内部连接工程师e.id上的技能es=es.engineer\U id内部连接技能\U es上的列表sl.skill\U id=sl.id内部连接工程师等级e.grade上的等级eg.id内部连接工程师e.location上的位置el=el.id e.team上的内部连接团队t=t.id,其中e.id>0,'$sql\U其中。'ORDER BY lname'$sql\u类似“%”“$search[$i]”、“%”或的sl.skill\u名称在哪里