PHP技巧之不用第三變數互換兩個變數值的解決方案

來源:互聯網
上載者:User

本文(解說見代碼注釋)

一、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:010101000110100001101001011100110010000001101001011100110010000001000010echo '交換之後 $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

總結

ok,以上差不多就是在php中不藉助第三個變數交換兩個變數值的所有方法了,當然,肯定還有更好地,我這裡算是拋磚引玉了。

說到底,都是小演算法,大家有空自己也可以研究下。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.