PHP互换两个变量值的方法(不用第三变量)


Posted in PHP onNovember 14, 2016

前言

今天在这里我们就来看看,在PHP中如何在不使用第三变量的情况下,达到交换两个变量值得目的。详细的解说见代码注释,下面来一起看看吧。

一、substr() && strlen()

代码:

<?php
/**
 * 双方变量为字符串时,可用交换方法一
 * 使用substr()结合strlen()两个方法达到交换变量值得目的
 */
$a = "This is A"; // a变量原始值
$b = "This is B"; // b变量原始值
echo '交换之前 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出原始值
$a .= $b; // 将$b的值追加到$a中
/**
 * $b得到$a值详解:
 *  先通过strlen()分别计算出$a和$b中字符串的长度【此时$a是原始$a和$b的合值】
 *  通过strlen($a)-strlen($b)即可得出原始$a的值长度
 *  在通过substr()方法在合并后的$a中从0开始截取到$a的长度,那么即可得到原始$a的值
 * $a得到$b值详解:
 *  由于此刻$b已经是$a的原始值了,而$a合并后的值为原始$a+原始$b的值,故用substr()在$a中从$b(原始$a)长度位置截取,则去的内容则为原始$b,则将$b值付给$a成功
 */
$b = substr($a,0,(strlen($a)-strlen($b)));
$a = substr($a, strlen($b));
echo '交换之后 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出结果值

运行结果:

     交换之前 $a 的值:This is A, $b 的值:This is B

     交换之后 $a 的值:This is B, $b 的值:This is A

二、str_replace()

代码:

<?php
/**
 * 双方变量为字符串时,可用交换方法二
 * 使用str_replace()方法达到交换变量值得目的
 * 此方法较第一种,逻辑上稍微简单点
 */
$a = "This is A"; // a变量原始值
$b = "This is B"; // b变量原始值
echo '交换之前 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出原始值
$a .= $b; // 将$b的值追加到$a中
$b = str_replace($b, "", $a); // 在$a(原始$a+$b)中,将$b替换为空,则余下的返回值为$a
$a = str_replace($b, "", $a); // 此时,$b为原始$a值,则在$a(原始$a+$b)中将$b(原始$a)替换为空,则余下的返回值则为原始$b,交换成功
echo '交换之后 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出结果值

运行结果:

     交换之前 $a 的值:This is A, $b 的值:This is B

     交换之后 $a 的值:This is B, $b 的值:This is A

三、list() && list()

代码:

<?php
/**
 * 双方变量为字符串时,可用交换方法三
 * 使用list()和array()方法达到交换变量值得目的
 * 此方法较第一、二种,代码最简洁
 */
$a = "This is A"; // a变量原始值
$b = "This is B"; // b变量原始值
echo '交换之前 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出原始值
list($b,$a) = array($a,$b); // list() 函数用数组中的元素为一组变量赋值。了解这个,相信其他的不用我多说了吧
echo '交换之后 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出结果值

运行结果:

     交换之前 $a 的值:This is A, $b 的值:This is B

     交换之后 $a 的值:This is B, $b 的值:This is A

四、异或

代码:

<?php
/**
 * 双方变量为字符串或者数字时,可用交换方法四
 * 使用异或运算
 */
$a = "This is A"; // a变量原始值
$b = "This is B"; // b变量原始值
echo '交换之前 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出原始值
/**
 * 原始二进制:
 * $a:010101000110100001101001011100110010000001101001011100110010000001000001
 * $b:010101000110100001101001011100110010000001101001011100110010000001000010
 * 
 * 下面主要使用按位异或交换,具体请参照下列给出的二进制过程,
 */
$a=$a^$b; // 此刻$a:000000000000000000000000000000000000000000000000000000000000000000000011
$b=$b^$a; // 此刻$b:010101000110100001101001011100110010000001101001011100110010000001000001
$a=$a^$b; // 此刻$a:010101000110100001101001011100110010000001101001011100110010000001000010
echo '交换之后 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出结果值

运行结果:

     交换之前 $a 的值:This is A, $b 的值:This is B

     交换之后 $a 的值:This is B, $b 的值:This is A

五、加(+)减(-)运算符

代码:

<?php
/**
 * 双方变量为数字时,可用交换方法五
 * 使用加减运算符,相当于数学运算了^_^
 */
$a = "This is A"; // a变量原始值
$b = "This is B"; // b变量原始值
echo '交换之前 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出原始值
$a=$a+$b; // $a $b和值
$b=$a-$b; // 不解释..
$a=$a-$b; // 不解释..
echo '交换之后 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出结果值

运行结果:

     交换之前 $a 的值:1, $b 的值:2

     交换之后 $a 的值:2, $b 的值:1

总结

好了,以上差不多就是在php中不借助第三个变量交换两个变量值的所有方法了,当然,肯定还有更好地,我这里算是抛砖引玉了。说到底,都是小算法,大家有空自己也可以研究下。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
php中使用Imagick实现图像直方图的实现代码
Aug 30 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
php制作中间带自己定义图片二维码的方法
Jan 27 PHP
二进制交叉权限微型php类分享
Feb 07 PHP
php基于curl主动推送最新内容给百度收录的方法
Oct 14 PHP
php接口技术实例详解
Dec 07 PHP
Yii2中多表关联查询hasOne hasMany的方法
Feb 15 PHP
PHP中for循环与foreach的区别
Mar 06 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
Feb 12 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
Jul 18 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
Nov 14 #PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 #PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 #PHP
Symfony2创建基于域名的路由相关示例
Nov 14 #PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 #PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
Nov 14 #PHP
CodeIgniter开发实现支付宝接口调用的方法示例
Nov 14 #PHP
You might like
回帖脱衣服的图片实现代码
2014/02/15 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
python实现按行切分文本文件的方法
2016/04/18 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
基于python 凸包问题的解决
2020/04/16 Python
python Selenium 库的使用技巧
2020/10/16 Python
JDK安装目录下有哪些内容
2014/08/25 面试题
机电专业体育教师求职信
2013/09/21 职场文书
毕业生机械建模求职信
2013/10/14 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
演讲稿的写法
2014/05/19 职场文书
企业宣传策划方案
2014/05/29 职场文书
常务副总经理任命书
2014/06/05 职场文书
娱乐节目策划方案
2014/06/10 职场文书
演讲稿的格式及范文
2014/08/22 职场文书
实习证明格式范文
2014/10/14 职场文书
三国演义读书笔记
2015/06/25 职场文书
校园新闻稿范文
2015/07/18 职场文书
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技