看板 PHP 關於我們 聯絡資訊
$array=array(&$_SESSION[a],&$_SESSION[b]); $min=&$array[0];//先假設為第一個 for($i=0;$i<count($array);$i++){ if(!count($array[$i])){ array_splice($array,$i,1); $i--; }else{ if($array[$i][0]['price'] < $min[0]['price']){ $min=&$array[$i]; } } } $_SESSION[result]=$min[0]; array_shift($min); == 上面這一小段會呼叫好幾次 $_SESSION[a]跟$_SESSION[b] 分別都是陣列,而且順序各是從小到大 現在想要將$_SESSION[result]定義成這裡面的最小值 所以照理說應該是各比較一次兩個的[0]元素就好 問題是不知道哪邊有問題 好像都只把$array[0]的東西印完 明明有設定splice條件的說 請問是哪裡出了問題? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.93.151
bibo9901:....那為什麼不直接比= = 08/09 22:19
KawasumiMai:因為這是測試,實際上$array會有三個以上的元素要比 08/09 22:43
KawasumiMai:會寫成for當然是有原因的... 08/09 22:43
kerash:要多一個&的原因是..? 08/09 22:44
KawasumiMai:指向?這樣修改$array[0]可以直接修改$_SESSION 08/09 22:47
tyf99:sort(array_merge(array1, array2, array3...)) 08/09 22:50
KawasumiMai:樓上的方法不行,有另外的因素 08/09 22:57
KawasumiMai:因為各個array一但用完,必須用另外的條件再次取值 08/09 22:57
KawasumiMai:有可能第二次的取值仍然比其他array的第一次小 08/09 22:58
KawasumiMai:因此這個快速的方法不能用 08/09 22:58
KawasumiMai:如果要土法煉鋼,這篇的code是哪邊出了問題呢? 08/09 22:58
bibo9901:看不大懂, 請問你array的結構長什麼樣子, 舉例一下 08/09 23:09
自己找出解答了... 問題出在 $min=&$array[0]; 這行 每次迴圈呼叫的時候,先假設是$array[0]最小 問題是splice($array,$i,1)的時間點在後面 導致有時下一圈的時候$array[0]是空陣列 然後$min[0]無法比較,就出問題了(死 解決方法是先在前面splice一次 然後才設定$min就沒問題了 ※ 編輯: KawasumiMai 來自: 61.62.93.151 (08/10 00:13)
Bambe:囧... 怎麼把剛解釋過的那個結構砍掉了... 08/10 00:23
Bambe:但結果也是跟我想的一樣,j=3的時候array[0]就沒東西可比了 08/10 00:24