[請益] function return 的 array 能否直接用 [] 取值?

看板PHP作者 (潑潑)時間11年前 (2013/07/16 15:33), 編輯推噓4(5133)
留言39則, 9人參與, 最新討論串1/2 (看更多)
function get_array() { return array('a', 'b', 'c'); } 我要怎麼直接取值? 右邊這個不能用,$b = get_array()[1]; 還是只能存在變數來用? $arr = get_array(); $b = $arr[1]; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.69.166.241

07/16 15:57, , 1F
function get_array($x){$array=array('a','b','c');
07/16 15:57, 1F

07/16 15:58, , 2F
return $array[$x];}
07/16 15:58, 2F

07/16 16:02, , 3F
或者 $y=(Is_array($y=get_array())) ? $y[0] : '';
07/16 16:02, 3F

07/16 16:03, , 4F
PHP5.4.x 後才支援你寫的方式
07/16 16:03, 4F
所以之前的版本只能透過改變結構的方式囉?

07/16 16:09, , 5F
這種呢? $y=($y=get_array() And isSet($y[0]))?$y[0]:'';
07/16 16:09, 5F

07/16 16:54, , 6F
我相信1樓的寫法,你整個都眼花掉了。
07/16 16:54, 6F

07/16 16:55, , 7F
我的建議則是:即使新方法允許,也不一定會是最好的做法。
07/16 16:55, 7F

07/16 17:45, , 8F
推一樓
07/16 17:45, 8F

07/16 18:15, , 9F
list 最直覺吧,剛剛看到第一個想倒也是 list :Q DK 大有回了
07/16 18:15, 9F

07/16 18:22, , 10F
推 list 也推 function 加參數
07/16 18:22, 10F
可惜list不適用,抱歉原文沒詳述

07/16 18:52, , 11F
我不推一樓的原因是因為:如果function不是自己寫的呢?
07/16 18:52, 11F

07/16 18:52, , 12F
動手去改別人的function嗎?那萬一改了造成其他故障呢?
07/16 18:52, 12F

07/16 18:53, , 13F
但是如果是原PO原本的寫法,或是list就不會有這問題。
07/16 18:53, 13F

07/16 19:08, , 14F
function get_array_by_index($index) {
07/16 19:08, 14F

07/16 19:08, , 15F
$array = get_array();
07/16 19:08, 15F

07/16 19:08, , 16F
if (isset($array[$i])) {
07/16 19:08, 16F

07/16 19:08, , 17F
return $array[$i];
07/16 19:08, 17F

07/16 19:09, , 18F
} else {
07/16 19:09, 18F

07/16 19:09, , 19F
return false;
07/16 19:09, 19F

07/16 19:09, , 20F
}
07/16 19:09, 20F

07/16 19:09, , 21F
}
07/16 19:09, 21F

07/16 19:09, , 22F
我發現我上面是打$index下面是打$i(面壁
07/16 19:09, 22F

07/16 21:40, , 23F
不難看出發問者想偷懶,結果又出來一個funciton,哈哈!!
07/16 21:40, 23F

07/16 21:51, , 24F
所以樓上,你成為絕世高手了嗎?還是你找到高手了?
07/16 21:51, 24F

07/16 21:53, , 25F
依發問者的需求 在5.4以下是無解的,只能改習慣Orz
07/16 21:53, 25F

07/16 22:08, , 26F
其實我個人覺得……他原本那樣寫就行了。
07/16 22:08, 26F

07/16 22:09, , 27F
不是著墨在程式非要精簡到什麼樣的省事地步。
07/16 22:09, 27F

07/16 22:09, , 28F
而是著重在自己以及別人能不能看得懂。
07/16 22:09, 28F

07/16 22:10, , 29F
如果你看一行code的時間比你看三行code還慢的話。
07/16 22:10, 29F

07/16 22:10, , 30F
你就要認真考慮真的不是少就是好。
07/16 22:10, 30F

07/16 22:14, , 31F
樓上的,你不考慮程式的效能嗎?
07/16 22:14, 31F

07/16 22:18, , 32F
我看不出這邊跟效能有什麼必然的關係。
07/16 22:18, 32F

07/16 22:18, , 33F
重點是你想講效能,請問你有寫CODE去測效能?
07/16 22:18, 33F

07/16 22:19, , 34F
還是你認為效能是嘴巴說這樣快就一定快?
07/16 22:19, 34F

07/16 22:19, , 35F
沒有做過整體的效能評估的話,怎麼知道整體的快慢?
07/16 22:19, 35F

07/16 22:24, , 36F
精簡語法與效能似乎不是成絕對的關係...
07/16 22:24, 36F

07/16 23:24, , 37F
我也會推...原本寫那樣就好...
07/16 23:24, 37F
是啊,最後我還是直接存變數再取來用 因為get_array()只是一個比喻用的function tkdmaf:我不推一樓的原因是因為:如果function不是自己寫的呢? 07/16 18:52 所以最後是偷懶不成了 see7di:不難看出發問者想偷懶,結果又出來一個funciton,哈哈!! 07/16 21:40 ※ 編輯: Qiqi 來自: 210.69.166.241 (07/17 12:21)

07/18 00:53, , 38F
如果return的陣列是associative array可以用extract
07/18 00:53, 38F

07/18 00:54, , 39F
extract(get_array()); var_dump($a, $b, $c);
07/18 00:54, 39F
文章代碼(AID): #1HvFTAAt (PHP)
文章代碼(AID): #1HvFTAAt (PHP)