PHP视频教程之PHP搜索附近的人实现代码
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息

利⽤PHP获取访客IP、地区位置、浏览器及来源页⾯等信息前⾔本⽂中主要介绍了关于利⽤PHP获取访客IP、地区位置、浏览器及来源页⾯等信息的相关内容,分享出来供⼤家参考学习,下⾯来⼀起看看详细的介绍:不多说了,每个⽅法都注释了,可以直接⽤:⽰例代码<?php//这个类似⽤来获取访客信息的//⽅便统计class visitorInfo{//获取访客ippublic function getIp(){$ip=false;if(!empty($_SERVER["HTTP_CLIENT_IP"])){$ip = $_SERVER["HTTP_CLIENT_IP"];}if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }for ($i = 0; $i < count($ips); $i++) {if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {$ip = $ips[$i];break;}}}return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);}//根据ip获取城市、⽹络运营商等信息public function findCityByIp($ip){$data = file_get_contents('/service/getIpInfo.php?ip='.$ip);return json_decode($data,$assoc=true);}//获取⽤户浏览器类型public function getBrowser(){$agent=$_SERVER["HTTP_USER_AGENT"];if(strpos($agent,'MSIE')!==false || strpos($agent,'rv:11.0')) //ie11判断return "ie";else if(strpos($agent,'Firefox')!==false)return "firefox";else if(strpos($agent,'Chrome')!==false)return "chrome";else if(strpos($agent,'Opera')!==false)return 'opera';else if((strpos($agent,'Chrome')==false)&&strpos($agent,'Safari')!==false)return 'safari';elsereturn 'unknown';}//获取⽹站来源public function getFromPage(){return $_SERVER['HTTP_REFERER'];}}总结以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
phpcms搜索功能

phpcms搜索功能随着互联网的发展和信息爆炸的时代,人们对于信息的获取变得越来越迫切。
作为网站开发者,提供一个高效的搜索功能对于用户来说是至关重要的。
在本文中,我们将介绍如何使用Phpcms搭建一个强大的搜索功能。
Phpcms是一款基于PHP开发的开源内容管理系统。
它不仅提供了搭建网站的基本功能,还提供了丰富的插件和模块,包括搜索功能。
下面我们将以一个新闻网站为例,介绍如何使用Phpcms实现搜索功能。
首先,在Phpcms后台进入“系统管理”-“模型管理”,点击“添加模型”,输入模型的名称和表名,点击“下一步”进入模型字段设置。
在这里,我们需要添加一些字段,比如新闻标题、新闻内容、发布时间等。
这些字段将用于搜索结果的展示。
在模型设置完成后,返回模型管理页面,点击“添加内容”,输入新闻的标题、内容等信息,点击“保存”即可添加新闻。
接下来,我们需要在网站前台添加搜索框并处理搜索请求。
在Phpcms的模板中,我们可以使用以下代码添加搜索框:````<form action="" method="get"><input type="text" name="keyword" placeholder="请输入关键字"><input type="submit" value="搜索"></form>````在用户提交搜索请求后,我们可以通过以下代码处理搜索请求并展示搜索结果:````<?php$keyword = isset($_GET['keyword']) ? $_GET['keyword'] : '';if(!empty($keyword)) {// 进行关键字匹配搜索$where = "title like '%$keyword%' or content like'%$keyword%'";$news = phpcms_model('news')->select($where);// 展示搜索结果foreach($news as $item) {echo "<h2>{$item['title']}</h2>";echo "<p>{$item['content']}</p>";}}>````以上代码首先获取用户输入的关键字,并进行模糊匹配搜索。
PHP实现简单搜索功能

PHP实现简单搜索功能⽅案:问答搜索1. 搜索结果列表,⾼亮显⽰搜索关键词内容2. ⽤户输⼊内容,点击搜索2.1 获取⽤户的搜索内容;2.2 调⽤分词服务,获取对搜索内容的分词;2.3 先查询是否已经存在这些关键词内容的缓存,有则直接取结果;否,进⾏下⼀步;2.4 如果 2.2 返回的分词数⼤于 5 个,则取 5 个关键词的问答帖⼦交集,判断数量是否 >= 30 条;不够,则逐次丢弃最后的关键词,再次进⾏查询,直到关键词的个数减到只有 1 个为⽌;2.4.1 对 2.4 中的多次结果进⾏去从,以及进⾏帖⼦的权重计算(问答帖⼦的质量计算:Q = α * T + β * S + γ * A , α = 0.2 , β = 0.5 , γ = 0.3 ;T - 时间; S - 点赞数 ; A - 回答数;T = (当前的时间秒戳 - 帖⼦的发帖时间) / 7*86400;)2.5 将 2.4 中的问答结果写⼊ Redis ,10 分钟失效;(key - hnb:qa:search_result , 帖⼦)2.6 读取 2.5 Redis 结果,展⽰到页⾯// 问答搜索public function getQuestionBySearch($arr_keyWords , $arr_keyWeight , $start , $num){$arr_temple_keyWords = $arr_keyWords;count($arr_keyWords) > 8 ? $len = 8 : $len = count($arr_keyWords);// redis 中的 key 值$key = 'hnb:qa:search:qa_score:' . implode('_' , array_splice($arr_temple_keyWords , 0 , $len));// 读取 redis 中 key = hnb-search:'关键词',... 有没有缓存.$exists = Hnb_Model_Qa_Question_Cache::getInstance()->existsKey($key);if($exists){$arr_questionInfo = unserialize($exists);} else {$arr_questionInfo = array();$arr_question_ids = array();$arr_label_in_question = array();do{$arr_keyWords = array_splice($arr_keyWords , 0 , $len--);$arr_result = Hnb_Model_Qa_Question_Cache::getInstance()->getSearchRelativeQuestion($arr_keyWords , $start , $num);// 问答帖⼦foreach($arr_result as$question){// 去掉重复的问答if(!in_array($question['id'] , $arr_question_ids)){$arr_question_ids[] = $question['id'];// 权重计算$question['score'] = pow(2 , $len);$this->_logicQaWeight($question , $arr_keyWords , $arr_keyWeight);$arr_questionInfo[] = $question;}}} while((count($arr_questionInfo) < 100) && $len);// 存在数据时if($arr_questionInfo){// 权重排序//uasort($arr_questionInfo , array($this , 'cmp'));usort($arr_questionInfo , array($this , 'cmp'));// 保存临时数据//Hnb_Model_Qa_Question_Cache::getInstance()->saveTempleData($key , $arr_questionInfo , $timeOutSecond = 600);// 设定该临时数据的失效时间}}return$arr_questionInfo;}// 按帖⼦的权重排序private function cmp($a , $b){if($a['score'] == $b['score']){return 0;}return ($a['score'] > $b['score']) ? -1 : 1;}// 问答帖⼦的权重计算逻辑private function _logicQaWeight(&$questionInfo , $arr_keyWords , $arr_keyWeight){$a = 0.2; // 发帖时间$b = 0.5; // 点赞数$c = 0.3; // 回复数//$d = ..; // 匹配度因⼦$b = $c = 0;$timeLine = 30 * 86400; //$minus = time() - $questionInfo['create_time'];// 向下取整$t = floor($minus / $timeLine);$tParam = 2 * pow(0.5 , $t);// ⽤户回答$user_answers = Hnb_Model_Qa_Answer::getInstance()->getAnswerInfoByQuestion($questionInfo['id']);// 顾问回答权重计算if($user_answers){is_string($user_answers) ? $user_answers = unserialize($user_answers) : '';$praise_num = null;foreach($user_answers as$answer){$praise_num += $answer['praise_num'];}} else {$praise_num = 0;}// 匹配度因⼦计算$this->_matchingQARate($questionInfo , $arr_keyWords , $arr_keyWeight);$weight = $a * $tParam + $b * $praise_num + $c * $questionInfo['answer_num'];$questionInfo['all_praise_num'] = $praise_num;$questionInfo['keywords'] = implode(',' , $arr_keyWords);$questionInfo['params'] = '时间-' . ($a * $tParam) . '##tParam-' . $tParam. '## 点赞数-' . ($b * $praise_num) . '## 回复数-' . ($c * $questionInfo['answer_num']);$questionInfo['score'] = $questionInfo['score'] + $weight;//print_r($questionInfo);}// 帖⼦的匹配度public function _matchingQARate(&$questionInfo , $arr_keyWords , $arr_keyWeight){// 1. 发送搜索内容到分词服务$arr_kwIntersect_result = array_intersect($arr_keyWords , $questionInfo['keyword']);echo '交集';print_r($arr_kwIntersect_result);// 2. 获取到返回的分词与权重$arr_format_wordInfo = Hnb_Model_Search::getInstance()->formatWordInfo($questionInfo['keyword2']);// 帖⼦关键词的权重,注意次序$w = array();foreach($arr_format_wordInfo as$wordInfo){if(in_array($wordInfo['keyword'] , $arr_kwIntersect_result)){$w[] = $wordInfo['weight'];}}// 搜索内容分词的权重,注意次序$y = array();foreach($arr_keyWeight as$weightInfo){if(in_array($weightInfo['keyword'] , $arr_kwIntersect_result)) {$y[] = $weightInfo['weight'];}}print_r($w);echo '<br />';print_r($y);echo '###############';$element = null;foreach($w as$key => $v){$element += $v * $y[$key];}echo$element;// 3. 与搜索出来的帖⼦做交集// 4. 计算帖⼦的匹配度/** 计算公式:* 3 中的交集作为分⼦* 3 中的帖⼦与 2 的分词权重*/}。
使用PHP实现查找附近的人

使⽤PHP实现查找附近的⼈LBS(基于位置的服务)查找附近的⼈有个更⼤的专有名词叫做LBS(基于位置的服务),LBS是指是指通过电信移动运营商的⽆线电通讯⽹络或外部定位⽅式,获取移动终端⽤户的位置信息,在GIS平台的⽀持下,为⽤户提供相应服务的⼀种增值业务。
因此⾸先得获取⽤户的位置,获取⽤户的位置有基于GPS、基于运营商基站、WIFI等⽅式,⼀般由客户端获取⽤户位置的经纬度坐标上传⾄应⽤服务器,应⽤服务器对⽤户坐标进⾏保存,客户端获取附近的⼈数据的时候,应⽤服务器基于请求⼈的地理位置配合⼀定的条件(距离,性别,活跃时间等)去数据库进⾏筛选和排序。
根据经纬度如何得出两点之间的距离?我们都知道平⾯坐标内的两点坐标可以使⽤平⾯坐标距离公式来计算,但经纬度是利⽤三度空间的球⾯来定义地球上的空间的球⾯坐标系统,假定地球是正球体,关于球⾯距离计算公式如下:具体推断过程有兴趣的推荐这篇⽂章:PHP函数代码如下:/*** 根据两点间的经纬度计算距离* @param $lat1* @param $lng1* @param $lat2* @param $lng2* @return float*/public static function getDistance($lat1, $lng1, $lat2, $lng2){$earthRadius = 6367000; //approximate radius of earth in meters$lat1 = ($lat1 * pi() ) / 180;$lng1 = ($lng1 * pi() ) / 180;$lat2 = ($lat2 * pi() ) / 180;$lng2 = ($lng2 * pi() ) / 180;$calcLongitude = $lng2 - $lng1;$calcLatitude = $lat2 - $lat1;$stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);$stepTwo = 2 * asin(min(1, sqrt($stepOne)));$calculatedDistance = $earthRadius * $stepTwo;return round($calculatedDistance);}MySQL代码如下:SELECTid, (3959 * acos (cos ( radians(78.3232) )* cos( radians( lat ) )* cos( radians( lng ) - radians(65.3234) )+ sin ( radians(78.3232) )* sin( radians( lat ) ))) AS distanceFROM markersHAVING distance < 30ORDER BY distanceLIMIT 0 , 20;除了上⾯通过计算球⾯距离公式来获取,我们可以使⽤某些数据库服务得到,⽐如Redis和MongoDB:Redis 3.2提供GEO地理位置功能,不仅可以获取两个位置之间的距离,获取指定位置范围内的地理信息位置集合也很简单。
PHP搜索引擎源代码

$this->_sites['meta'] = $this->getMeta($content);
$this->_sites['title'] = $this->getTitle($content);
//$this->_sites['detail'] = $this->getDetail($content);
对某一网址进行检索获取网站基本信息同时提取网站的所有连接
PHP搜索引擎源代码
简单PHP搜索引擎源代码,需要开启PHP的cURL扩展。功能:对某一网址进行检索,获取网站基本信息,同时提取网站的所有连接。
<?php
class Engine{
private $_url = ''; //URL地址
private $_sites = ''; //页面信息
return substr($body,0,400);
}
//获取title内容
public function getTitle($content){
preg_match('/
$this->_sites['links'] = $this->getLinks($content);
}
//获取meta内容
public function getMeta($content){
$file = 'metaCache';
file_put_contents($file,$content);
php站内搜索并高亮显示关键字的实现代码

php站内搜索并⾼亮显⽰关键字的实现代码复制代码代码如下:<?phprequire_once 'sqlTools.class.php';//封装类,可执⾏dql、dml语句$info=$_POST['info'];$sql="select name,password,email from user_500 where name like '%$info%' or password like '%$info%' or email like '%$info%'";$sqlTools=new SqlTools();$res=$sqlTools->execute_dql($sql);while ($row=mysql_fetch_assoc($res)){$row['name']=preg_replace("/($info)/i","<b style=\"color:red\">\\1</b>",$row['name']);$row['password']=preg_replace("/($info)/i","<b style=\"color:red\">\\1</b>",$row['password']);$row['email']=preg_replace("/($info)/i","<b style=\"color:red\">\\1</b>",$row['email']);echo $row['name']."-->".$row['password']."-->".$row['email']."<br>";}>思路分析:将sql语句中包含的%$info%交给DBMS执⾏的时候,他会查找字段中含有变量$info的值的信息,%$info--->查找以$info的值结束的信息$info%--->查找以$info的值开头的信息通过正则函数preg_replace()将搜索到的关键字⾼亮显⽰,⽐如, $row['name']=preg_replace("/($info)/i","<b style=\"color:red\">\\1</b>",$row['name']); 的意思是:通过POST⽅接收到的值$info替换为加上样式(红⾊加粗)的结果,并将结果重新赋给$row[‘name']如果要搜索多个关键字的话,可以对接收到值$info进⾏分割,⽐如$info_more=explode(" ",$info);//这种⽅式能对以空格隔开的关键字进⾏分割,再对分割后的结果挨个进⾏查询,同样,可以使⽤正则表达式函数进⾏替换⼯作,以⾼亮显⽰关键字sqlTools.class.php的源代码:复制代码代码如下:<?phpclass SqlTools{private $host="localhost";private $dbname="test";private $dbuser="root";private $dbpwd="";private $conn;public function __construct(){$this->conn=mysql_connect($this->host,$this->dbuser,$this->dbpwd);if(!$this->conn){die("连接数据库失败".mysql_error());}mysql_select_db($this->dbname,$this->conn) or die("找不到该数据库".mysql_error());mysql_query("set names utf8");}public function execute_dml($sql){$bool=mysql_query($sql);if ($bool){if ($bool>0) {return 1;}else{return 2;}}else {return 0;}}public function execute_dql($sql){$res=mysql_query($sql);return $res;}public function close_conn(){ mysql_close($this->conn); }}>原创⽂章:WEB开发_⼩飞。
php获取当前坐标代码的方法
在PHP中,要获取当前位置的经纬度坐标,可以使用以下代码方法之一:1. 使用IP地理位置数据库:通过查询IP地理位置数据库,可以获取当前用户所在的经纬度坐标。
在PHP中,可以使用第三方库(如IP地理位置数据库查询库)或自行编写代码进行查询。
以下是一个简单的示例代码:```php<?phpfunction getCoordinates() {// 定义IP地理位置数据库查询库的路径$database = 'path/to/ip-geolocation-database.php';// 获取当前用户的IP地址$ip = $_SERVER['REMOTE_ADDR'];// 包含IP地理位置数据库查询库include($database);// 查询IP地址对应的经纬度坐标$coordinates = ip_geolocation_get_coordinates($ip);// 返回经纬度坐标return $coordinates;}// 获取当前位置坐标并输出$coordinates = getCoordinates();echo '经度:' . $coordinates['longitude'] . '<br>';echo '纬度:' . $coordinates['latitude'] . '<br>';>```请注意,这种方法只能获取到粗略的地理位置坐标,精度可能不够高。
2. 使用浏览器地理位置API:如果你的应用程序是在Web浏览器中运行,并且用户已经授权获取地理位置信息,你可以使用浏览器地理位置API来获取当前位置的经纬度坐标。
以下是一个简单的示例代码:```php<?php// 检查浏览器地理位置API是否可用if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/(?:Chrome\/|Edge\/|Firefox\/|Safari\/)\d+/',$_SERVER['HTTP_USER_AGENT'])) {// 使用JavaScript获取地理位置坐标并将数据发送到服务器echo '<script>navigator.geolocation.getCurrentPosition(function(position) {var lat = titude;var lon = position.coords.longitude;document.getElementById("latlon").innerHTML = "经度:" + lon + "<br>纬度:" + lat;}, function(error) {document.getElementById("latlon").innerHTML = "无法获取地理位置:" + error.message;});</script>';} else {echo '此浏览器不支持地理位置API。
php 搜索功能
php 搜索功能PHP搜索功能追求高效、准确的搜索功能对于许多网站和应用程序来说都是至关重要的。
PHP是一种流行的服务器端编程语言,具备强大的搜索功能。
下面将介绍一些使用PHP实现搜索功能的方法。
一、全文搜索全文搜索是一种广泛应用于数据库和文本文档中的搜索方法,它根据关键字检索文本内容。
在PHP中,可以使用MySQL数据库的全文索引功能来实现全文搜索。
首先,在数据库表中创建全文索引,然后使用MATCH和AGAINST语句进行搜索。
这种方法提供了较快的搜索速度和准确的搜索结果。
二、模糊搜索有时候用户在搜索时可能只记得关键词的一部分或存在拼写错误,这就需要使用模糊搜索。
PHP提供了多种模糊搜索方法,包括LIKE、REGEXP、Soundex和Levenshtein等。
LIKE语句可以根据关键词的一部分来搜索,并使用通配符进行匹配。
而REGEXP语句则可以使用正则表达式进行更复杂的模糊搜索。
三、过滤搜索过滤搜索是根据某些条件来过滤搜索结果,使结果更加准确。
PHP中可以使用各种条件语句(如WHERE)和运算符(如AND、OR)来实现过滤搜索。
例如,可以根据日期、价格、地理位置等条件来过滤搜索结果。
这种方法可以提供更具体的搜索结果,满足用户的特定需求。
四、分类搜索分类搜索是将搜索结果按照特定的类别进行分类,以方便用户更加快速地找到所需的信息。
在PHP中,可以使用数组、关联数组或数据库表来实现分类搜索。
例如,可以将商品按照价格区间、品牌、颜色等分类,并根据用户选择的分类条件来展示相应的搜索结果。
五、排序搜索排序搜索是根据某些条件对搜索结果进行排序,使用户更容易找到他们想要的内容。
在PHP中,可以使用ORDER BY语句对搜索结果进行排序。
例如,可以根据日期、价格、评分等条件对搜索结果进行排序,以提供更加合理的搜索结果。
总结PHP拥有强大的搜索功能,可以通过全文搜索、模糊搜索、过滤搜索、分类搜索和排序搜索等方法来实现准确、高效的搜索功能。
php站内搜索代码
Php简单站内搜索代码一,设计搜索表单在网站的根目录下建个search.htm,内容如下<html><head><title>搜索表单</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head> <body bgcolor="#FFFFFF" text="#000000"><form name="form1" method="post" action="search.php"><table width="100%" cellspacing="0" cellpadding="0"><tr><td width="36%"><div align="center"><input type="text" name="keyword"></td><td width="64%"><input type="submit" name="Submit" value="搜索"></td></tr></table></form></body></html>二,搜索程序再在根目录下建个search.php 的文件,用来处理search.htm表单传过来的数据.内容如下<?php//获取搜索关键字$keyword=trim($_POST[“keyword”]);//检查是否为空if($keyword==””){echo”您要搜索的关键字不能为空”;exit;//结束程序}?>这样如果访问者输入的关键字为空时,可以做出提示。
PHPMYSQL搜索周边坐标,并计算两个点之间的距离
PHPMYSQL搜索周边坐标,并计算两个点之间的距离搜索附近地点,例如,坐标(39.91, 116.37)附近500⽶内的⼈,⾸先算出“给定坐标附近500⽶”这个范围的坐标范围。
虽然它是个圆,但我们可以先求出该圆的外接正⽅形,然后拿正⽅形的经纬度范围去搜索数据库。
红⾊部分为要求的搜索范围,绿⾊部分为实际搜索范围。
/*** 获取周围坐标* Enter description here ...* @param unknown_type $lng 固定坐标经度* @param unknown_type $lat 固定坐标纬度* @param unknown_type $distance 搜索周边距离,单位KM* @return multitype:multitype:number*/function returnSquarePoint($lng, $lat,$distance = 1){$earthRadius = 6378.138; //地球半径,单位KM$dlng = 2 * asin(sin($distance / (2 * $earthRadius)) / cos(deg2rad($lat)));$dlng = rad2deg($dlng);$dlat = $distance/$earthRadius;$dlat = rad2deg($dlat);return array('left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng));//使⽤此函数计算得到结果后,带⼊sql查询。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PHP视频教程之PHP搜索附近的人实现代码
搜索附近的人这项功能对我们来说已经不在陌生了,那么搜索附近的人怎么用PHP实现呢?本篇文章小编就带读者们来了解一下PHP搜索附近的人如何用代码实现。
本文实例为大家分享PHP实现搜索附近的人具体代码,供大家参考,具体内容如下。
实现思路:
首先,我们应该这样想:既然我们知道了用户当前位置的经纬度,又知道我们将要搜索的范围,我们可不可以计算出一个范围?也就是说,根据一个中心点和半径,计算出符合条件的经纬度的最大值和最小值。
具体实现:
那么到此,想要独立思考完成的小伙伴可以不要继续往下看了。
上面我们提到该功能的一个实现原理,接下来我们就讲解一下具体的实现步骤。
我们先声明一个函数,用作计算经纬度的范围:
/**
* 根据经纬度和半径计算出范围
* @param string $lat 纬度
* @param String $lng 经度
* @param float $radius 半径
* @return Array 范围数组
*/
private function calcScope($lat, $lng, $radius) {
$degree = (24901*1609)/360.0;
$dpmLat = 1/$degree;
$radiusLat = $dpmLat*$radius;
$minLat = $lat - $radiusLat; // 最小纬度
$maxLat = $lat + $radiusLat; // 最大纬度
$mpdLng = $degree*cos($lat * (PI/180));
$dpmLng = 1 / $mpdLng;
$radiusLng = $dpmLng*$radius;
$minLng = $lng - $radiusLng; // 最小经度
$maxLng = $lng + $radiusLng; // 最大经度
/** 返回范围数组 */
$scope = array(
'minLat' => $minLat,
'maxLat' => $maxLat,
'minLng' => $minLng,
'maxLng' => $maxLng
);
return $scope;
}
返回的数组中包含了在$radius 范围内,符合条件的最大最小经纬度。
既然我们已经获取到了范围,那么我们就可以开始从数据库中查找所有在这个经纬度范围内符合条件的记录:
/**
* 根据经纬度和半径查询在此范围内的所有的电站
* @param String $lat 纬度
* @param String $lng 经度
* @param float $radius 半径
* @return Array 计算出来的结果
*/
public function searchByLatAndLng($lat, $lng, $radius) {
$scope = $this->calcScope($lat, $lng, $radius); // 调用范围计算函数,获取最大最小经纬度
/** 查询经纬度在 $radius 范围内的电站的详细地址 */
$sql = 'SELECT `字段` FROM `表名` WHERE `Latitude` <
'.$scope['maxLat'].' and `Latitude` > '.$scope['minLat'].' and
`Longitude` < '.$scope['maxLng'].' and `Longitude` > '.$scope['minLng'];
$stmt = self::$db->query($sql);
$res = $stmt->fetchAll(PDO::FETCH_ASSOC); // 获取查询结果并返回 return $res;
}
扩展:
直到现在,我们已经知道了如何计算出附近的人,但在实际需求中,我们往往需要计算出每一个人与当前中心点的实际距离。
接着,我们再来看一个方法:
/**
* 获取两个经纬度之间的距离
* @param string $lat1 纬一
* @param String $lng1 经一
* @param String $lat2 纬二
* @param String $lng2 经二
* @return float 返回两点之间的距离
*/
public function calcDistance($lat1, $lng1, $lat2, $lng2) {
/** 转换数据类型为 double */
$lat1 = doubleval($lat1);
$lng1 = doubleval($lng1);
$lat2 = doubleval($lat2);
$lng2 = doubleval($lng2);
/** 以下算法是 Google 出来的,与大多数经纬度计算工具结果一致 */
$theta = $lng1 - $lng2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
return ($miles * 1.609344);
}
以上就是小编为大家简单分享的搜索附近的人怎么用PHP实现,希望对小伙伴们有所帮助,想要了解更多内容的小伙伴可以登录扣丁学堂官网咨询。