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实现框架(二)
Oct 09 PHP
图书管理程序(一)
Oct 09 PHP
ajax缓存问题解决途径
Dec 06 PHP
php xml实例 留言本
Mar 20 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
May 15 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 PHP
php获取微信基础接口凭证Access_token
Aug 23 PHP
Codeigniter里的无刷新上传的实现代码
Apr 14 PHP
php判断/计算闰年的方法小结【三种方法】
Jul 06 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 PHP
php7中停止php-fpm服务的方法详解
May 09 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
PHP编程与应用
2006/10/09 PHP
php mysql Errcode: 28 终极解决方法
2009/07/01 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
PHP将XML转数组过程详解
2013/11/13 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
prototype 中文参数乱码解决方案
2009/11/09 Javascript
从零开始学习jQuery (二) 万能的选择器
2010/10/01 Javascript
基于jquery的无限级联下拉框js插件
2011/10/29 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
javascript跨域总结之window.name实现的跨域数据传输
2015/11/01 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
Python运算符重载用法实例
2015/05/28 Python
Python 操作文件的基本方法总结
2017/08/10 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
Python实现代码块儿折叠
2020/04/15 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
大专自我鉴定范文
2013/10/23 职场文书
服务行业个人求职的自我评价
2013/12/12 职场文书
财政专业求职信范文
2014/02/19 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书