[請益] 比較兩個陣列,依序抽值(已解決)

看板PHP作者 (その唇にキスして欲しい)時間13年前 (2012/08/09 21:51), 編輯推噓0(0014)
留言14則, 5人參與, 最新討論串1/1
$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

08/09 22:19, , 1F
....那為什麼不直接比= =
08/09 22:19, 1F

08/09 22:43, , 2F
因為這是測試,實際上$array會有三個以上的元素要比
08/09 22:43, 2F

08/09 22:43, , 3F
會寫成for當然是有原因的...
08/09 22:43, 3F

08/09 22:44, , 4F
要多一個&的原因是..?
08/09 22:44, 4F

08/09 22:47, , 5F
指向?這樣修改$array[0]可以直接修改$_SESSION
08/09 22:47, 5F

08/09 22:50, , 6F
sort(array_merge(array1, array2, array3...))
08/09 22:50, 6F

08/09 22:57, , 7F
樓上的方法不行,有另外的因素
08/09 22:57, 7F

08/09 22:57, , 8F
因為各個array一但用完,必須用另外的條件再次取值
08/09 22:57, 8F

08/09 22:58, , 9F
有可能第二次的取值仍然比其他array的第一次小
08/09 22:58, 9F

08/09 22:58, , 10F
因此這個快速的方法不能用
08/09 22:58, 10F

08/09 22:58, , 11F
如果要土法煉鋼,這篇的code是哪邊出了問題呢?
08/09 22:58, 11F

08/09 23:09, , 12F
看不大懂, 請問你array的結構長什麼樣子, 舉例一下
08/09 23:09, 12F
自己找出解答了... 問題出在 $min=&$array[0]; 這行 每次迴圈呼叫的時候,先假設是$array[0]最小 問題是splice($array,$i,1)的時間點在後面 導致有時下一圈的時候$array[0]是空陣列 然後$min[0]無法比較,就出問題了(死 解決方法是先在前面splice一次 然後才設定$min就沒問題了 ※ 編輯: KawasumiMai 來自: 61.62.93.151 (08/10 00:13)

08/10 00:23, , 13F
囧... 怎麼把剛解釋過的那個結構砍掉了...
08/10 00:23, 13F

08/10 00:24, , 14F
但結果也是跟我想的一樣,j=3的時候array[0]就沒東西可比了
08/10 00:24, 14F
文章代碼(AID): #1G8y1c2w (PHP)
文章代碼(AID): #1G8y1c2w (PHP)