按值切片/限制数组

时间:2012-02-15 16:56:14

标签: php arrays

背景 在一个表单中创建一个有趣的赌博游戏的下拉菜单(学生可以'赌'他们是对的)。

变量; $平衡 学生从3英镑起,并在10英镑的桌子上玩

$ table(有一个;

£10表,范围为1,2,3等10。

£100表,范围为10,20,30等100。

£1,000表,范围为100,200,300,400等1000.)

我已将$ table分配给最大值的零个数, 例如$ table = 2; 100英镑的桌子

限制; 我只希望下拉菜单提供最高的12个可能值(这可能包括下表-IMP!)。 学生不会被自动允许在“下一个”桌子上玩。

资源; 一系列可能的值;

$a = array(1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,10,20,30,40,50,60,70,80,90,100,200,300,400,500,600,700,800,900,1000);

我可以写一种方法来按表限制数组; (任何表的最大键是(9 * $ table))//因此为什么我使用上面的零(真正的游戏达到10亿美元!)

$arrayMaxPos = (9*$table);
$maxbyTable = array_slice($a, 0, $arrayMaxPos);

现在我需要一种方法来确保$ maxbyTable中的VALUE不大于$ balance。 创建所有允许下注的$ maxBet数组。

这就是我要去的地方!

(然后我会执行“array_slice($ maxBet,-12);”只显示下拉列表中的最高12位数)

编辑 - 我更喜欢不必使用数组散步,因为当我知道数组要在哪里结束时似乎没必要。

第二次编辑道歉我意识到有一种方法可以在数学上确定哪个KEY映射到最高出价。

如下

$integerLength = strlen($balance);//number of digits in $balance


$firstDigit = substr($balance, 0, 1); 
然后因为这种特殊的模式而有些诡计

$maxKeyValue = (($integerlength*9) - 10 + $firstDigit);

所以例如;

$balance = 792;

$maxKeyValue = ((3*9) - 10 + 7);// (key[24] = 700)

这可以解决这个问题并且无法解决我的编程问题。

1 个答案:

答案 0 :(得分:1)

可选!

首先,假设适用相同的规则,您不需要$a数组来了解表格$n上允许的价格

$table = $n; //$n being an integer
for ($i = 1; $i <= 10; $i++) {
    $a[] = $i * pow(10, $n);
}

将生成一个完全有效的数组(表#1为1-10,表#2为10-100等)。


至于根据值切片,使用foreach循环生成一个新数组,然后在达到限制时停止。

foreach ($a as $value) {
    if ($value > $balance) { break; }
    $allowedByTable[] = $value;
}

这将为您留下一个数组$allowedByTable,它只有可能的赌注,低于用户的当前余额。


重要提示

即使您将您认为正确的选项设置为选项,也不要相信用户输入并始终验证服务器端的输入。对于某人来说,使用DOM操作改变组合框中的值并且押注他不应该拥有的总和是相当微不足道的。始终检查您获得的输入是否符合预期!