1. 程式人生 > >PHP不用第三變數互換兩個變數值的方法

PHP不用第三變數互換兩個變數值的方法

在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() 最好理解最好用

<?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