作者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