php打印输出棋盘的2种方法

 更新时间:2016年11月25日 17:23  点击:2286
下面本文章来给大家介绍php打印输出棋盘的2种方法,有兴趣的朋友不防进入参考一下哦。

例子1

 代码如下 复制代码

<?php
/**
 * 隔行隔列换色
 * string fun_table(int $rows=9,int $cols=9)
 * $rows 表示行数 必须为整数 并且必须在1-20之间
 * $cols 表示列数 必须为整数 并且必须在1-20之间
 */
function fun_table($rows=9,$cols=9){
 if ($rows<1 || $rows>20){
  return "必须为整数 并且必须在1-20之间";
 }
 if ($cols<1 || $cols>20){
  return "必须为整数 并且必须在1-20之间";
 }
 if($rows!=(int)($rows)){
  return '行数 必须为整数';
 }

 if($cols!=(int)($cols)){
  return '列数 必须为整数';
 }
 $str="";
 $str.= "<table  cellspacing='0' width='500px' border = '1px' bordercolor='black'>";
 for ($i=1;$i<=$rows;$i++){
  $str.=  "<tr>";
   for ($j=1;$j<=$cols;$j++){ 
    if(($i+$j)%2){
     $str.=  "<td height='50px' bgcolor='black'>";
    }else{
     $str.=  "<td></td>";
   }
  }
 $str.=  "</tr>";
}
$str.=  "</table>";
return $str;
}
echo fun_table();
?>

例子2 简单实现棋盘-for循环

实现这个棋盘首先我们想想棋盘是怎么样的,是有很多个方格组成,然后由黑色和白色的相间的方格组成。首先我们先把方格画出来。

 

 代码如下 复制代码
<?php
echo "<table  cellspacing='0' width='500px' border = '1px' bordercolor='black'>";
for ($i=1;$i<=10;$i++){
    echo "<tr>";
    for ($j=1;$j<=10;$j++){   
            echo "<td>54im</td>";
        }
    echo "</tr>";
}
echo "</table>";
?>

得到以下结果:(是不是有点眉目了,我们现在只要把格子上颜色就可以)


php简单实现棋盘 

看到上面棋盘后,考虑下黑白格排放位置,有个规律可以发现,横排和竖排上白色格子都是基数,黑色的都是偶数,我们可以用取余的方法来判断这个格子该显示什么颜色,基数单元格我让他显示白色,偶数单元格显示黑色,基数+偶数=偶数,所以偶数单元格(黑色)我们很好找出来了。剩余的就是基数格(白色)

 代码如下 复制代码


<?php
/**
通过for循环和html实现棋盘
**/
echo "<table  cellspacing='0' width='500px' border = '1px' bordercolor='black'>";
for ($i=1;$i<=10;$i++){
    echo "<tr>";
    for ($j=1;$j<=10;$j++){   
        if(($i+$j)%2){
            echo "<td height='50px' bgcolor='black'>";
        }else{
            echo "<td></td>";
            }
        }
    echo "</tr>";
}
echo "</table>";
?>

得到的效果是这样:

php简单实现棋盘

用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑

下面是一个微信公众平台关注和取消关注的实例:

 代码如下 复制代码

define("TOKEN", "w3note");//定义识别码
$wechatObj = new wechatCallbackapiTest();//实例化wechatCallbackapiTest类

if(!isset($_GET["echostr"])){
     $wechatObj->responseMsg();
}else{
 $wechatObj->valid();
}
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);
      $RX_TYPE = trim($postObj->MsgType);
      switch($RX_TYPE){
       case "event":
       $result = $this->receiveEvent($postObj);
       breadk;
      }
      echo $result;
  }else{
   echo "";
   exit;
  }
 }
  private function receiveEvent($object){
   $content = "";
   switch ($postObj->Event){
    case "subscribe":
    $content = "欢迎关注网志博客";//这里是向关注者发送的提示信息
    break;
    case "unsubscribe":
    $content = "";
    break;
   }
   $result = $this->transmitText($object,$content);
   return $result;
 
    }
 private function transmitText($object,$content){
   $textTpl = "<xml>
       <ToUserName><![CDATA[%s]]></ToUserName>
       <FromUserName><![CDATA[%s]]></FromUserName>
       <CreateTime>%s</CreateTime>
       <MsgType><![CDATA[text]]></MsgType>
       <Content><![CDATA[%s]]></Content>
       <FuncFlag>0</FuncFlag>
       </xml>";
    $result = sprintf($textTpl, $object->FromUserName, $object->$ToUserName, time(), $content);
    return $result;
 
  }
 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;
  }
 }
}

代码相关参数说明:

参数 描述
ToUserName 开发者微信号
FromUserName  发送方帐号(一个OpenID)
CreateTime  消息创建时间 (整型)
MsgType  消息类型,event
Event  事件类型,subscribe(订阅)、unsubscribe(取消订阅)

要对微信公众平台进行开发,首先需要成为开发者,可以到https://mp.weixin.qq.com/注册一个帐号,然后按要求填写相关信息即可。
有了公众号后,在公众平台的高级功能里选择开发模式,然后在服务器配置那里填写URL和Token两个选项,Token可以随便定义,一般是英文字母加数字,但对于URL就有一点难度了,最好有自己的主机或者虚似空间,没有的最好到新浪那里注册一个免费的空间。
 
技术方面,我最讨厌理论的东西了,我喜欢实例操作,相信很多人也是这样吧,那下面我就把我的操作过程写下来吧。
下面是我的操作记录,图也截下来了,如果上面的要求都满足了,不妨也跟着步骤操作一下。
 
1、下载微信公从平台官方的示例文件
到“http://mp.weixin.qq.com/wiki/index.php?title=接入指南”,找下载PHP求例代码,如图
微信公众平台开发入门教程
 
2、获取URL
解压上面下载的文件后得到wx_sample.php,这里我把它重命名为wx.php,然后我到我的空间根目录新建一个文件夹api,再把wx.php文件上传到目录api里,这样我就获取到了,我的URL为http://w3note.com/api/wx.php,Token我就取名为w3note吧。
 
3、修改示例文件
上一步我们已经拥有了URL和Token,在填写公众平台开发模式下的服务器配置之前,先把我们先前上传的wx.php文件下载打开,找到”define("TOKEN", "weixin");“,这里我把weixin替换成我的Token名称为w3note,然后保存,上传覆盖,如图所示
微信公众平台开发入门教程
4、填写服务器配置
在微信公众平台的开发模式的服务器配置那里填写上面获取的URL和Token信息,然后提交,成功后,会有提示,“你已成为开发者”,如图所示,
微信公众平台开发入门教程
 
到这里,我已经成为开发者了,这是开发微信公众平台的开始!可能我们还对成为开发者能做什么一无所知,下面我就做一个实验,算作”扫肓“吧。
 
打开wx.php,写一个语句,调用接收器方法,如下图红框,
微信公众平台开发入门教程
 
然后找到第49行,给$contentStr重新赋值为"hello world!",如图
微信公众平台开发入门教程
 
接下来,用微信号和微信公众号通讯。
首先我用我的手机微信扫一下下面的图,然后关注w3note这个公众号。
微信公众平台开发入门教程
为了测试方便,我就登录微信网页版(用手机也可以),https://web.weixin.qq.com/
 
我向w3note这个公众号发了一个笑脸,然后它就自动回复,如图
微信公众平台开发入门教程
 
图中输出的"hello world!",就是前面代码中$contentStr变量的值。
 
再来一张
微信公众平台开发入门教程

 

给自己网站上的图片添加水印,在图片上留下属于自己的信息,这有两个好处:一是宣传自己的品牌,二是就算带图片的文章被转载了,也会自动的留下了版权。

本文主要实现了php图片上传自动给图片加水印,在下篇中我会给出用php添加文字水印的代码。

php给图片加水印其实很简单,没有想象的那么神奇,就是利用了php里面的一个GD库。说起GD库,其实就是php里面一个专门用于处理图片有关的扩展,比如我们熟悉的验证码、生成缩略图,包括今天所说的php给图片加水印都是要有GD库的支持。

提示:新安装的php环境,可能需要开启GD库,开启方法:打开php.ini,去掉extension=php_gd2.dll前面的“;”然后重启apache/iis即可。

实现并不复杂,核心代码还不到20行,主要是掌握几个函数就行了。

实现源码:

 代码如下 复制代码

<?php
 $ori_img = "images/13801220684507.jpg"; //原图
 $water_img = "logo.png"; //水印
 $new_img = "images/daixiaorui.jpg"; //生成水印后的图片
 
 $original = getimagesize($ori_img); //得到图片的信息,可以print_r($original)发现它就是一个数组
 $watermark = getimagesize($water_img);
 
 $s_original = imgCreateFrom($ori_img, $original[2]); //$original[2]是图片类型,其中1表示gif、2表示jpg、3表示png
 $s_watermark = imgCreateFrom($water_img, $watermark[2]);
 
 $posX = $original[0] - $watermark[0]-6; //X坐标(右下角)
 $poxY = $original[1] - $watermark[1]-3; //Y坐标(右下角)

 //打水印
 imagecopy($s_original, $s_watermark, $posX, $poxY, 0, 0, $watermark[0], $watermark[1]);
 //header("Content-type:image/jpeg");
 //imagejpeg($s_original); //向浏览器输出图片
 $loop = imagejpeg($s_original, $new_img); //生成新的图片(jpg格式),如果用imagepng可以生成png格式
 if($loop){
  echo "水印添加成功!";
 }
 
 //根据文件类型 创建一个新图象
 function imgCreateFrom($img_src, $val){
  switch($val){
   case 1 : $img = imagecreatefromgif($img_src);
    break;
   case 2 : $img = imagecreatefromjpeg($img_src);
    break;
   case 3 : $img = imagecreatefrompng($img_src);
    break;
  }
  return $img;
 } 
?>

给图片添加水印除了用基础的GD库实现,其实还可以ImageMagick这个工具,它的功能更强大,不过一般没多大需求,就用上面这个代码了。

在做微博登陆之前是需要申请到APP KEY 和App Secret ,这个的申请方式请去 open.weibo.com 申请相关内容。

在官网也有相关的开发文档http://open.weibo.com/wiki/可以查看相关资料。
我这里下载的php的SDK直接进行的web网站应用。
下载SDK,配置好config文件。

 

 代码如下 复制代码

<?php
header('Content-Type: text/html; charset=UTF-8');
 
define( "WB_AKEY" , 'xxxxxxxxxx' );
define( "WB_SKEY" , 'xxxxxxxxxxxxxxxxxxxxxxxxx' );
define( "WB_CALLBACK_URL" , 'http://xxxxxxxxxxxx/callback.php' );//回调地址
*这里的回调地址是指如果用户同意授权,页面跳转至 YOUR_REGISTERED_REDIRECT_URI/?code=CODE     //YOUR_REGISTERED_REDIRECT_URI 就是你的回调地址。
那就第一步需要首先引导用户进行授权。


include_once( 'config.php' );
include_once( 'saetv2.ex.class.php' );
 
$o = new SaeTOAuth( WB_AKEY , WB_SKEY );
 
$code_url = $o->getAuthorizeURL( CANVAS_PAGE );
 
echo "<a href=$code_url>授权</a>";


//授权地址为:
 
https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI</pre>

如果用户同意授权之后,在你的回调地址里需要获取 换取Access Token 来调用接口。获取信息,等等。。。

 代码如下 复制代码

if($_REQUEST['code']){
echo "sds";
$keys = array();
$keys['code'] = $_REQUEST['code'];
$keys['redirect_uri'] = CANVAS_PAGE;
$tt= new SaeTOAuth( WB_AKEY , WB_SKEY );
$bb = $tt->getAccessToken('code',$keys);
var_dump($bb);
}

在成功获取到AccessToken之后,可以调用saetv2.ex.class.php的一切封装好的函数进行操作,例如,我这里做登陆功能就需要获取用户的信息:

 代码如下 复制代码


/**
* 根据用户UID或昵称获取用户资料
*
* 按用户UID或昵称返回用户资料,同时也将返回用户的最新发布的微博。
* <br />对应API:users/show
*
* @access public
* @param mixed $uid_or_name 用户UID或微博昵称。
* @return array
*/
function show_user( $uid_or_name )
{
return $this->request_with_uid( 'https://api.t.sina.com.cn/users/show.json' , $uid_or_name );
}

[!--infotagslink--]

相关文章

  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • js实现浏览器打印功能的示例代码

    这篇文章主要介绍了js如何实现浏览器打印功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • EXCEL数据上传到SQL SERVER中的简单实现方法

    EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL传到服务器上.做法: 在ASP.NET环境中,添加一个FileUpload上传控件后台代码的E.X: 复制代码 代码如下: if...2013-09-23