作者KawasumiMai (その唇にキスして欲しい)
看板PHP
標題[請益] 比較兩個陣列,依序抽值
時間Thu Aug 9 21:51:31 2012
$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
1F:→ bibo9901:....那為什麼不直接比= = 08/09 22:19
2F:→ KawasumiMai:因為這是測試,實際上$array會有三個以上的元素要比 08/09 22:43
3F:→ KawasumiMai:會寫成for當然是有原因的... 08/09 22:43
4F:→ kerash:要多一個&的原因是..? 08/09 22:44
5F:→ KawasumiMai:指向?這樣修改$array[0]可以直接修改$_SESSION 08/09 22:47
6F:→ tyf99:sort(array_merge(array1, array2, array3...)) 08/09 22:50
7F:→ KawasumiMai:樓上的方法不行,有另外的因素 08/09 22:57
8F:→ KawasumiMai:因為各個array一但用完,必須用另外的條件再次取值 08/09 22:57
9F:→ KawasumiMai:有可能第二次的取值仍然比其他array的第一次小 08/09 22:58
10F:→ KawasumiMai:因此這個快速的方法不能用 08/09 22:58
11F:→ KawasumiMai:如果要土法煉鋼,這篇的code是哪邊出了問題呢? 08/09 22:58
12F:→ 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)
13F:→ Bambe:囧... 怎麼把剛解釋過的那個結構砍掉了... 08/10 00:23
14F:→ Bambe:但結果也是跟我想的一樣,j=3的時候array[0]就沒東西可比了 08/10 00:24