注:本文代码方法基于php框架codeigniter,其中的数据库操作等同与php直接操作(方法不当之处,请多指教!)
问题:已知数组:$uidArray = array(4,9,2);
现在需要按$uidArray中uid的顺序查询另一数据表(如下),
uid | username |
---|---|
1 | name1 |
2 | name2 |
4 | name4 |
9 | name9 |
查出对应的username,并按顺序返回,即希望得到
$nameArray = array('name4','name9','name2');
思想:只需使查询后username对应的键同$uidArray中相应uid对应的键一致,再使用php按键排序将结果排序即可(前提$uidArray键默认0,1,2...)
解决:
方法1:
public function getUsername($uidArray){
//互换键值
$turnArray = array_flip($uidArray);
//查询出未审核id所对应的用户信息,codeigniter查询方法
$this->db->where_in('uid',$uidArray);
$this->db->select('username');
$dbResult = $this->db->get('userTable');
if($dbResult->num_rows() > 0){
foreach ($dbResult->result_array() as $row){
//配合前面互换键值,使$result的键值和$uidArray一致
$result[$turnArray[$row['id']]] = $row;
}
//按键排序
ksort($result);
return $result;
} else {
return FALSE;
}
}
方法2:
private function getUsername($uidArray){
//查询出未审核uid所对应的用户信息,codeigniter
$this->db->where_in('uid',$uidArray);
$this->db->select('username');
$dbResult = $this->db->get('userTable');
if($dbResult->num_rows() > 0){
foreach ($dbResult->result_array() as $row){
//搜索在$uidArray中 值为$row['id']的建,作为$result的键
$result[array_search($row['id'], $uidArray)] = $row;
}
//按键排序
ksort($result);
return $result;
} else {
return FALSE;
}
}