比如:我們儲值話費的時候,充大於10元送1元話費,充大於50元送5元話費。
那麼此時,我儲值的是51元話費,我怎麼去命中的是50元送5元話費,而此時不再命中大於10元送1元話費了。
老大,幫我看下吧
$a = array('50'=>'5','10'=>'1');$s = 51;function test($s,$a){$flag = 0;foreach($a as $k=>$v){if($s >=$k){$flag=$v;}}return $flag;}echo test($s,$a);
回複討論(解決方案)
$a = array('50'=>'5','10'=>'1');$s = 51;function test($s,$a){ $flag = 0; foreach($a as $k=>$v){ if($s >=$k){ return $v; //注意這裡 } } return $flag;}echo test($s,$a);
$a = array('50'=>'5','10'=>'1');$s = 51;function test($s,$a){ $flag = 0; foreach($a as $k=>$v){ if($s >=$k){ $flag=$v; break; //這樣比較規範(一個模組只有一個出口) } } return $flag;}echo test($s,$a);
$a = array('50'=>'5','10'=>'1');$s = 51;function test($s,$a){ $flag = 0; foreach($a as $k=>$v){ if($s >=$k){ $flag=$v; break; //這樣比較規範(一個模組只有一個出口) } } return $flag;}echo test($s,$a);
如果$a 換成 $a = array('40'=>'3','50'=>'5','10'=>'1');
那麼結果就是3了,這個時候51比50要大,應該是5啊
你在foreach裡面賦值的話,如果數組是以金額從大到小排列,那第一次檢測到合格時候就應該返回,即同1#,否則會被接下來的合格小數額覆蓋。
或者把數組從小到大排列,但是這樣效率相對低一點,因為這樣要把數組從頭到尾判斷完。
如果$a 換成 $a = array('40'=>'3','50'=>'5','10'=>'1');
那麼結果就是3了,這個時候51比50要大,應該是5啊
[code=php]$a = array('50'=>'5','10'=>'1');$s = 51;function test($s,$a){ $flag = 0; foreach($a as $k=>$v){ if($s >=$k){if($flag<$v) $flag=$v; } } return $flag;}echo test($s,$a);
[/code]
數組是排列不規則的話就這樣
$a = array('40'=>'3','50'=>'5','10'=>'1');$s = 51;function test($s,$a){ $flag = 0; foreach($a as $k=>$v){ if($s >=$k){ if($flag<$v) $flag=$v; } } return $flag;}echo test($s,$a);
$a = array('40'=>'3','50'=>'5','10'=>'1');$s = 51;function test($s,$a){ $flag = 0; foreach($a as $k=>$v){ if($s >=$k){ if($flag<$v) $flag=$v; } } return $flag;}echo test($s,$a);
OK,這樣就解決了。3Q
??就可以了。
$a = array('40'=>'3','50'=>'5','10'=>'1');$s = 51;arsort($a,SORT_NUMERIC); // 先按key大小排序function test($s,$a){ foreach($a as $k=>$v){ if($s >=$k){ return $v; } } return 0;}echo test($s,$a); // 5
規則都不好好的制定
$a = array('40'=>'3','50'=>'5','10'=>'1');$s = 51;function test($s,$a){ $flag = 0; foreach($a as $k=>$v){ if($s >=$k){ $flag = max($flag, $v); //取大值 } } return $flag;}echo test($s,$a);