2007年11月23日

[PHP] 交換兩個變數 (不使用 tmp 變數) 程式寫法

在宗董的 Blog 看到這篇:交換兩個變數 (不使用 tmp 變數) 程式寫法,本來想留言,不過宗董的 Blog 系統似乎有問題。

宗董的方法是這樣的:

$a ^= $b;
$b ^= $a;
$a ^= $b;

我是想說既然是用 PHP 了,就應該好好善用一下 PHP 的原生語法:

list($a, $b) = array($b, $a);

搞定~~

這個是從 PHP 程式設計專家必備手冊一書看來的。



Posted by jaceju at 樂多Roodo! │15:27 │回應(8) PHP
樂多分類:網路/3C 共同主題:PHP 程式設計 工具:加入樂多書籤編輯本文
Ads by Roodo! 
回應文章

我也有那一本書...
但是..但是..好像借人就不見了!!!
Posted by ㄚ凱 at 2007年11月23日 15:50

To 凱:

替你默哀中...

不過狼不是我抬的~~ XD
Posted by jaceju at 2007年11月23日 16:10
宗董的寫法是電腦位元運算的基礎,
同樣的寫法(^=)在各式電腦語法中應該都適用,
只要該語法有支援.
Posted by Amauds at 2007年11月23日 20:06

To Amauds:

如果要交換的是陣列或物件呢?
Posted by jaceju at 2007年11月23日 21:20
那就另當別論了,
我認為一個臨時的變數交換,
用位元運算最快速.
Posted by Amauds at 2007年11月24日 08:42

To Amauds:

所以還是要看狀況吧?如果是在要求高效能且是計算的是數字的話,當然用位元運算會快點。

不過差幾倍呢?我證實過了,在兩個變數皆為數字的狀況下,位元運算法大約只比 list 法快 1.3 倍而已。因此一般應用場合就不用太在意效能了,看得懂最重要。
Posted by jaceju at 2007年11月24日 10:16

剛剛看了 "Zend/zend_operators.c"
bitwise_xor_function()

字串互換的條件是兩者的長度要一樣, 否則交換後最長的字串會被截掉
Posted by jj at 2008年03月3日 22:34

您好!我在網路上搜尋PHP相關的資訊 發現到您的網站
因為研究上的需要需要用PHP來寫
但我本身對PHP仍不是很熟
都是邊做才邊解決問題
現在在做的時候遇到了瓶頸
在下面的網頁
http://140.114.98.63/~k11t410j77/J3171.php
在這樣的網頁中我要怎麼去print出
map00010 Glycolysis / Gluconeogenesis
map00020 Citrate cycle (TCA cycle)
map00030 Pentose phosphate pathway

這樣的資料呢?因為不管我怎麼print 他都是出來這樣子
Posted by k11 at 2008年07月9日 20:58