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 相关文章推荐
谈谈PHP语法(4)
Oct 09 PHP
PHP编程与应用
Oct 09 PHP
Windows中安装Apache2和PHP4权威指南
Nov 18 PHP
PHP投票系统防刷票判断流程分析
Feb 04 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
php的POSIX 函数以及进程测试的深入分析
Jun 03 PHP
php+mysql查询优化简单实例
Jan 13 PHP
Yii实现复选框批量操作实例代码
Mar 15 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
Apr 03 PHP
阿里云的WindowsServer2016上部署php+apache
Jul 17 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 PHP
用php实现分页效果的示例代码
Dec 10 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
phpmyadmin操作流程
2006/10/09 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
php pdo操作数据库示例
2017/03/10 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
JS小功能(setInterval实现图片效果显示时间)实例代码
2013/11/28 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
详解Vue中过度动画效果应用
2017/05/25 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
2017/09/20 Javascript
JavaScript fetch接口案例解析
2018/08/30 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
python中的列表与元组的使用
2019/08/08 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
css3的transition属性详解
2014/12/15 HTML / CSS
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
教师党性分析材料
2014/02/04 职场文书
大学迎新标语
2014/06/26 职场文书
高中校园广播稿
2014/10/21 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
2015年司法局工作总结
2015/05/22 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
使用python绘制横竖条形图
2022/04/21 Python