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下用rmdir实现删除目录的三种方法小结
Apr 20 PHP
PHP 进程锁定问题分析研究
Nov 24 PHP
php select,radio和checkbox默认选择的实现方法
May 15 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
基于PHP常用函数的用法详解
May 10 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
Jun 21 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
Feb 16 PHP
简单谈谈PHP中的trait
Feb 25 PHP
php 如何设置一个严格控制过期时间的session
May 05 PHP
php实现微信支付之企业付款
May 30 PHP
php基于Redis消息队列实现的消息推送的方法
Nov 28 PHP
PHP大文件切割上传功能实例分析
Jul 01 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 mysql数据库操作类
2008/06/04 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
extjs form textfield的隐藏方法
2008/12/29 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
Python出现segfault错误解决方法
2016/04/16 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
三年级科学教学反思
2014/01/29 职场文书
小学生综合素质评语
2014/04/23 职场文书
小学班主任评语大全
2014/04/23 职场文书
活动总结怎么写
2014/04/28 职场文书
2014年个人售房协议书
2014/10/30 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python