php按数组中的值的顺序查询,并按顺序返回到新的数组中
注:本文代码方法基于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; } }