php获取数组元素中头一个数组元素值的方法
reset (PHP 3, PHP 4, PHP 5)
函数定义 mixed reset ( array &array )
作用:该函数将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值,如果数组为空则返回 FALSE。例如:
代码如下 | 复制代码 |
<?php $array=array('step one','step two','step three','step four'); echo reset($array); |
//输出:step one
next (PHP 3, PHP 4, PHP 5)
函数定义 mixed next ( array &array )
作用:返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回 FALSE。例如:
代码如下 | 复制代码 |
<?php |
//输出:step two
警告:如果数组包含空的单元,或者单元的值是 0 则本函数碰到这些单元也返回 FALSE。要正确遍历可能含有空单元或者单元值为 0 的数组,参见 each() 函数。
current (PHP 3, PHP 4, PHP 5)
函数定义 mixed current ( array &array )
作用:返回当前被内部指针指向的数组单元的值,并不移动指针。初始指向插入到数组中的第一个单元。如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。
警告:如果数组包含有空的单元(0 或者 "",空字符串)则本函数在碰到这个单元时也返回 FALSE。这使得用 current() 不可能判断是否到了此数组列表的末端。要正确遍历可能含有空单元的数组,用 each() 函数。
next() 和 current() 的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位。如果移动指针的结果是超出了数组单元的末端,则 next() 返回 FALSE。
下面是相关函数的使用例子:
代码如下 | 复制代码 |
<?php |
代码如下 | 复制代码 |
define("TOKEN", "xingans"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->responseMsg(); class wechatCallbackapiTest { //签名验证公共接口 public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } //主入口处理函数 public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $msgType=trim($postObj->MsgType); switch($msgType){ case 'text': $resultStr=$this->handleText($postObj); break; case 'event': $resultStr=$this->handleEvent($postObj); break; default: $resultStr=$this->handleDefault($postObj); break; } echo $resultStr; }else { echo "Error"; exit; } } //处理文本消息 private function handleText($obj){ $keyword=trim($obj->Content); if(preg_match('/天气/',$keyword)){ $contentStr=$this->handleWeather($obj); }elseif(preg_match('/翻译/',$keyword)){ $contentStr=$this->handleTranslation($obj); }else{ $contentStr=$this->handleChat($obj); } return $this->handleStr($obj,$contentStr); } //处理天气 private function handleWeather($obj){ $keyword=mb_substr($obj->Content,-2,2,'utf-8'); $zone=mb_substr($obj->Content,0,-2,'utf-8'); if($keyword=='天气' && !empty($zone)){ $zoneArr=json_decode(file_get_contents('http://api.k780.com:88/?app=weather.city&format=json'),true); $zoneArr=$zoneArr['result']; $cityId=''; foreach($zoneArr as $value){ if($zone==$value['citynm']){ $cityId=$value['weaid']; break; } } if(!empty($cityId)){ $data=file_get_contents("http://api.k780.com:88/?app=weather.today&weaid=$cityId&appkey=10638&sign=3736578f099375665f9f141a6326b757&format=json"); $data=json_decode($data); $contentStr="今天是:".$data->result->days.",".$data->result-> week.",".$data->result->citynm."天气:".$data->result->weather."n温度:".$data->result->temperature.", ".$data->result->wind_direction.",".$data->result->wind_power.", 最低温度:".$data->result->temp_low.",最高温度:".$data->result->temp_high; }else{ $contentStr='找不到输入的城市!'; } }else{ $contentStr='输入的查询格式不正确!'; } return $contentStr; } //处理翻译 private function handleTranslation($obj){ $keyword=mb_substr($obj->Content,0,2,'utf-8'); $words=mb_substr($obj->Content,2,220,'utf-8'); if($keyword=='翻译' && !empty($words)){ $data=file_get_contents('http://fanyi.youdao.com/openapi.do?keyfrom=zfsblog&key=364295447&type=data&doctype=json&version=1.1&q='.urlencode($words)); $data=json_decode($data,true); switch($data['errorCode']){ case '0': $contentStr=$data['translation'][0]; break; case '20': $contentStr='要翻译的文本过长'; break; case '30': $contentStr='无法进行有效的翻译'; break; case '40': $contentStr='不支持的语言类型'; break; case '50': $contentStr='无效的key'; break; default: $contentStr='Error'; break; } }else{ $contentStr='输入的翻译格式不正确!'; } return $contentStr; } //处理聊天信息 private function handleChat($obj){ $keywords=$obj->Content; $curlPost=array("chat"=>$keywords); $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_URL,'http://www.xiaojo.com/bot/chata.php');//抓取指定网页 curl_setopt($ch, CURLOPT_HEADER, 0);//设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec($ch);//运行curl curl_close($ch); if(!empty($data)){ $contentStr=$data; }else{ $ran=rand(1,5); switch($ran){ case 1: $contentStr= "小九今天累了,明天再陪你聊天吧"; break; case 2: $contentStr= "小九睡觉喽~~"; break; case 3: $contentStr= "呼呼~~呼呼~~"; break; case 4: $contentStr= "你话好多啊,不跟你聊了"; break; case 5: $contentStr= "你话好多啊,不跟你聊了"; break; } } return $contentStr; } //创建自定义菜单 public function createMenu($data,$token){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$token); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); return $result; } //查询自定义菜单 function getMenu($token){ $url="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=$token"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,true) ; //获取数据返回 curl_setopt($ch, CURLOPT_BINARYTRANSFER,true) ; //在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false); return $output = curl_exec($ch); } //删除自定义菜单 public function deleteMenu($token){ $url="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$token; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $result = curl_exec($ch); curl_close($ch); return $result; } //处理事件消息 private function handleEvent($obj){ $content=''; switch($obj->Event){ case 'subscribe': $content.="welcome-欢迎关注该公众号号!"; break; case 'unsubscribe': $content.="感谢您一直以来对该公众号的关注,再见!"; break; default: $content.=""; break; } return $this->handleStr($obj,$content); } //处理回复消息字符串 private function handleStr($obj,$content='',$flag=0){ $textTpl = " return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time(), $content,$flag); } //签名验证函数 private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?> |
测试结果:
并且附加上代码:
代码如下 | 复制代码 |
<?php |
例子
代码如下 | 复制代码 |
function Bing_string_cleanr( $string ){ |
使用方法:
代码如下 | 复制代码 |
echo Bing_string_cleanr( '内 容 <br> <html> asdfeiuonsdfje' ); |
删除空白
代码如下 | 复制代码 |
<?php // First remove the leading/trailing whitespace // Now remove any doubled-up whitespace // Finally, replace any non-space whitespace, with a space // Echo out: 'This line contains liberal use of whitespace.' |
1、需要设置一个 TOKEN 信息
代码如下 | 复制代码 |
efine("TOKEN", "weixin"); |
这个 TOKEN 信息可以由开发者自行设定。
2、有个 wechatCallbackapiTest 类,该类中含有3个方法:valid、responseMsg、checkSignature,其中方法valid、checkSignature是用作验证接口URL有效性用的,responseMsg是我们使用最多的方法,后续大部分的开发工作都会在这里完成。
在我们对接口进行有效性验证通过后,就不再需要进行验证了,这时我们就需要使用到 responseMsg 方法。那么如何保证接口验证通过后,不需要去切换其中的方法或修改其中的代码呢?
我是这样做的:
代码如下 | 复制代码 |
public function indexAction() //valid signature , option return FALSE; |
讲解一下:
因为在验证接口有效性时传递了个 echostr 参数,而在消息接口响应过程中没有这个参数,所有我们这里用这个参数来判断是验证接口还是接口响应:
代码如下 | 复制代码 |
isset($_GET['echostr']) |
相关文章
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
- 下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
- php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
- 获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
- 本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
- 这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <?php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
- Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
- 主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
- 这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
- jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
- 1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
- 下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
- 这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 如果是为了取到tagName后再进行判断,那直接用下面的代码会更方便: $(element).is('input') 如果是要取到标签用作到别的地方,可以使用一下代码: $(element)[0].tagName 或: $(element).get(0).tagName...2014-05-31
- 这篇文章主要介绍了C#读取文件所有行到数组的方法,涉及C#针对文件及数组的相关操作技巧,需要的朋友可以参考下...2020-06-25