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
php实现简单洗牌算法
Jun 18 PHP
浅谈PHP变量作用域以及地址引用问题
Dec 27 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
php+mysqli使用面向对象方式查询数据库实例
Jan 29 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 PHP
PHP+JS实现的商品秒杀倒计时用法示例
Nov 15 PHP
php 二维数组时间排序实现代码
Nov 19 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
php实现文章评论系统
Feb 18 PHP
PHP实现微信小程序用户授权的工具类示例
Mar 05 PHP
php解决约瑟夫环算法实例分析
Sep 30 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
UCenter Home二次开发指南
2009/05/28 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
2016/08/05 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
对angularJs中ng-style动态改变样式的实例讲解
2018/09/30 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
python笔记:mysql、redis操作方法
2017/06/28 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
django使用LDAP验证的方法示例
2018/12/10 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
教师爱岗敬业演讲稿
2014/05/05 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
公司租房协议书
2014/10/14 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL