我有一个PHP数组,我用它来生成HTML表单。 PHP数组是这样的:
<?php
$vdb = array (
array( "Alabama", 275),
array( "Alaska", 197),
array( "Arizona", 3322));
?>
生成HTML表单的PHP如下所示。我需要将值作为状态的名称,因为我正在使用一些AJAX来显示用户选择的状态。
<?php
echo "<table border='1'><thead><tr><th></th><th>State</th><th>Contacts</th><th>Email</th></tr></thead>";
for ($row = 0; $row < 42; $row++) {
echo "<tr><td class='input_button'><input type='checkbox' name='vdb[]' value='".$vdb[$row][0]."' title='".$vdb[$row][1]."' /></td>";
echo "<td>".$vdb[$row][0]."</td>";
echo "<td>".$vdb[$row][1]."</td>";
}
echo "</table>";
?>
我要做的是,在提交表单时,使用用户选择的状态,遍历PHP数组并从所选状态中总计数字。因此,如果我查看了阿拉巴马州和阿拉斯加州,我想添加275 + 197。
这是我认为会起作用的,但事实并非如此:
<?php
$vendors = array();
if (isset($_POST["vdb"])) {
$vendors = $_POST["vdb"];
}
$ven_i = 0;
$ven_j = 0;
$ven_total = 0;
foreach ($vendors as $value) {
foreach ($vdb as $vdb_value) {
if ($vendors[$ven_i] == $vdb[$ven_j][0]) {
$ven_total += $vdb[$ven_j][1];
}
$ven_j++;
}
$ven_i++;
}
?>
然后$ ven_total应该是我正在寻找的总数。但是,$ ven_total最终成为第一个选中的复选框,它忽略了其余的复选框。我正在使用AJAX正确地执行此操作,在前端显示总数,但我不知道如何将其传递给表单提交。我宁愿不使用GET和URL变量,因为用户可以在URL中键入内容并修改计数。知道我做错了什么,或者更好的方法来解决这个问题,我能够理解吗? (非常新手程序员。)
答案 0 :(得分:0)
为什么不将数字用作$ vdb数组的键?
$vdb = array (
array( 275=>"Alabama" ),
array( 197=>"Alaska" ),
array( 3322=>"Arizona" )
);
然后
$sum = array_intersect($vdb, $vendors);
$total = 0;
foreach ($sum as $key=>$value) {
$total = $total+$key;
}
unset($key, $value, $sum);
array_intersect()函数比较两个或多个数组,并返回一个数组,其中包含来自第一个数组的键和值,前提是该值存在于所有其他数组中。
答案 1 :(得分:0)
这个答案最终会有几个不同的建议,但请耐心等待。 首先,使用列表作为数据结构变得混乱,因为你最终忘记了索引1的实际含义。因此,由于您不仅仅具有名称与值的配对,您可以尝试将其作为基本类,并使您的代码更具可读性。
<?php
class State {
public $name;
public $contact_count;
public $email_count;
function __construct($name, $contact_count, $email_count) {
$this->name = $name;
$this->contact_count = $contact_count;
$this->email_count = $email_count;
}
}
$states = array (
new State("Alabama", 275, 210),
new State("Alaska", 197, 149),
new State("Arizona", 3322, 2145));
$selected_vendors = array("Alabama", "Arizona");
$ven_total = 0;
foreach ($selected_vendors as $selected) {
foreach ($states as $state) {
if ($selected == $state->name) {
$ven_total += $state->contact_count;
}
}
}
echo $ven_total
?>
这仍然是你的代码刚刚清理了一些。循环和添加似乎工作正常。您是否已完成print_r($_POST)
以确保以您期望的方式获得价值?您提到不想使用GET,但POST可以像GET一样欺骗,始终验证用户的输入。