前因
学习了这么久的php,对于我自己肯定是要为以后的工作做铺垫的,而找工作的面试是不可避免的,面试中我们经常会被问到一些技术相关的问题。而如何在PHP里交换两个变量的值,是很多公司面试都会涉及到的问题,所以我在这里总结整理一下,为的是我以后能有迹可循,如果能帮到更多的人,我也很开心~
思路
PHP里变量的数据类型其实有很多种,但一般需要做到交换的就是整型和字符串,所以面试一般也会针对此,我就只针对这两种来总结了。
实例
中间变量法
我们最简单能想到的方法就是寻找中间变量进行过渡。
<?php
$a = 2;
$b = 5;
$c = $a; //$c = 2
$a = $b; //$a = 5
$b = $c; //$b = 2
echo $a."\n".$b;
这种方法有个好处就是交换时对资源相对占用较少。也正是因为相对最简单,所以一般面试也会要求我们不允许借助中间变量,这个时候我们就要寻求别的办法了。
四则运算法
任何两个非零的整数,都可以在四则运算里构建关系。那我们就可以运用这个关系,在不借用其他变量的同时交换它们的值。
<?php
$a = 2;
$b = 5;
//加法
$a += $b; //$a = 7
$b = $a - $b; //$b = 2
$a = $a - $b; //$a = 5
echo $a."\n".$b;
//减法
$b -= $a; //$b = 3
$a = $b + $a; //$a = 5
$b = $a - $b; //$b = 2
echo $a."\n".$b;
//乘法
$a *= $b; //$a = 10
$b = $a / $b; //$b = 2
$a = $a / $b; //$a = 5
echo $a."\n".$b;
//除法
$a /= $b; //$a = 0.4
$b = $a * $b; //$b = 2
$a = $b / $a; //$a = 5
echo $a."\n".$b;
需要注意的是,如果有些公司要求写出方法的个数的话,加减乘除只算一种奥。当然如果实在想不出来,写上凑数也可以,万一面试官心软通过呢~(狗头)
拼接法(截取)
由于拼接之后取数的方式不同,所以分为两种。主要思路就是把变量进行拼接之后,根据其原本数据类型的长度不同,来分别提取其中的部分,即可完成交换。
<?php
$a = 2;
$b = 5;
$a .= $b; //$a = 25
$b = substr($a,0,strlen($a) - strlen($b)); //$b = 2
$a = substr($a,strlen($b)); //$a = 5
echo $a."\n".$b;
因为是拼接不牵扯运算,所以我们可以对字符串的变量也进行交换。
<?php
$a = 'hello';
$b = 'world';
$a .= $b; //$a = 'helloworld'
$b = substr($a,0,strlen($a) - strlen($b)); //$b = 'hello'
$a = substr($a,strlen($b)); //$a = 'world'
echo $a."\n".$b;
这中间使用到的两个函数时,需要注意下这两个函数的作用。
substr($string,$start,$end = full)其中第一个参数为你需要截取的字符串;第二个参数为你需要从哪一位开始截取的下标值;第三个参数为你需要截取的最后一位的下标值,如果不填写值,则默认一直截取至最后一位。
strlen($string)是指所传字符串的长度。
但这种方法直观可见的就是写起来相对多一点,所以我们可以换一种方法进行交换。
拼接法(替换)
同上一种方法一样,我们需要将变量先拼接。然后我们可以利用函数将拼接后的进行替换。
<?php
$a = 'hello';
$b = 'world';
$a .= $b; //$a = 'helloworld'
$b = str_replace($b,'',$a); //$b = 'hello'
$a = str_replace($b,'',$a); //$a = 'world'
echo $a."\n".$b;
这种方法中我们用到了str_replace($search,$replace,$subject,count = null),其中第一个参数为你需要替换的部分,第二个参数为你需要替换成的内容,第三个参数为你需要替换的部分出现的地方,第四个参数不是必填参数,会返回你一共在这个需要替换的地方出现了几次替换的次数,如果不填写则默认不返回。
数组法
和拼接法的思路基本相同,我们可以利用数组的特性,来利用‘键名对应键值’,通过下标交换变量的值。
<?php
$a = 'hello';
$b = 'world';
$a = [$a,$b]; //$a = ['hello','world']
$b = $a[0]; //$b = 'hello'
$a = $a[1]; //$a = 'world'
echo $a."\n".$b;
函数法
我们总说PHP是世界最好的语言,所以这么好的语言,也一定有它专门解决这类问题的方法库,list()
<?php
$a = 'hello';
$b = 'world';
list($b,$a) = [$a,$b];
echo $a."\n".$b;
这种方法应该目前最直接也是最简单的书写的方法了,其实list()函数也是利用了数组的思想,进行了转换,只不过PHP的专业人员已经提前替我们封装成了函数。
总结
这类问题应该是面试中经常会见到的问题了,其实它不仅考察了我们对于PHP基础知识的掌握,也考验了我们思考能力和临场反应能力。以上就是我总结的PHP里交换变量的方法了,如果有任何编写问题,希望大家批评指正。也欢迎大家对此进行补充~当然能帮到大家是最好了~