PHP二维数组:根据二维数组中的值,使用户输入2减去用户输入1

PHP二维数组:根据二维数组中的值,使用户输入2减去用户输入1,php,arrays,post,multidimensional-array,Php,Arrays,Post,Multidimensional Array,我必须创建一个PHP应用程序来计算两个美国人口普查年之间的人口差异。普查年份和人口将存储在二维数组中。应用程序应计算总体差异并显示该差异。如果差异为负值,则显示反映人口减少的消息。如果差值为正值,则显示一条消息,指示人口增加。如果人口没有变化,则显示一条信息,说明人口没有变化。这就是我到目前为止所做的: <body> <form action="handle_census.php" method="post"> <p>Y

我必须创建一个PHP应用程序来计算两个美国人口普查年之间的人口差异。普查年份和人口将存储在二维数组中。应用程序应计算总体差异并显示该差异。如果差异为负值,则显示反映人口减少的消息。如果差值为正值,则显示一条消息,指示人口增加。如果人口没有变化,则显示一条信息,说明人口没有变化。这就是我到目前为止所做的:

<body>
        <form action="handle_census.php" method="post">
            <p>Year 1: <input type="number" name="value1" step="10"  min= "1790" max= "2010" size="5"></p>
            <p>Year 2: <input type="number" name="value2" step="10"  min= "1790" max= "2010" size="5"></p>
            <input type="submit" name="submit" value="submit">
        </form>
    </div>
</body>
</html>

第一年:

第2年:

它处理从1790年开始的用户输入,最大值为2010年。用户选择一年,PHP post处理计算。这就是它不适合我的地方:

<?php 
$yearList1 = $_POST['value1'];
$yearList2 = $_POST['value2'];

$yearList1 = array(
    array("1790", 3929214),
    array("1800", 5236631),
    array("1810", 7239881),

$yearList2 = array(
    array("1790", 3929214),
    array("1800", 5236631),
    array("1810", 7239881),

$yearTotal = $yearList2 - $yearList1;

print $yearTotal;
?>

您的变量名称相同,因此它肯定不起作用。这意味着您将数组和所有类型的东西相乘。大概您正在尝试执行以下操作:

<?php
# First check these are submitted
if(!empty($_POST['value1']) && !empty($_POST['value2'])) {
    # Assign years (you probably want to trim() and check is_numeric() here)
    $year_1 = $_POST['value1'];
    $year_2 = $_POST['value2'];
    # Presumably these are hardcoded otherwise you would isolate using a query
    # instead of grabbing all this list in one giant array
    $years = array(
        array("1790", 3929214),
        array("1800", 5236631),
        array("1810", 7239881)
    );
    # Set defaults here
    $y1 =
    $y2 = 0;
    # Loop first array to get value
    # If you are doing a query, this part is not relevant
    foreach($years as $year) {
        # Determine year matches for year 1 and 2
        if($year[0] == $year_1) {
            $y1 = $year[1];
        }
        if($year[0] == $year_2) {
            $y2 = $year[1];
        }
    }
    # Determine if the years are larger or smaller from year before
    $larger =   ($y1 > $y2);
    # Divide
    $total = ($larger)? ($y2/$y1) : ($y1/$y2);
    # Write the percentage with a plus or minus
    $percent    =   (($larger)? '-':'+').round($total*100,2,PHP_ROUND_HALF_UP).'%';
    # The difference in numbers
    $diff       =   ($larger)? ($y1 - $y2) : ($y2 - $y1);
    # Show both results
    print_r(array(
        'percent'=>$percent,
        'diff'=>(($larger)? '-':'+').$diff
    ));
}

不能将两个数组相乘。它给出了一个致命错误“不支持的操作数类型”。如果您在运行此代码时没有看到错误,则说明您的开发环境有问题。使用display\u errors=on进行编码。您可能应该使用关联数组,而不是二维数组。@安非他明对不起,我更正了,它不是“*”它的减法“-”@Barmar我编辑了我的文章clarification@ProximusSeraphimDimitriDavi数组上的算术运算不会分布到元素。您可以使用
+
并将其附加到数组中,不允许使用任何其他算法。对不起,我刚刚编辑了我的文章,以进行澄清和编码。基本上如果用户选择1790和1800。。。我想让PHP处理这个问题,然后减去:1800-1790,这意味着它将实际减去数组中的相关值,如下所示:5236631-3929214,打印将给出该值为1307417..我希望这是有意义的。这很有效!此外,我还能够打印值等。现在我的问题是。。。如果是肯定的,我可以让它自动打印“人口增加(答案)”并以绿色突出显示,如果是否定的,我可以打印“人口减少(答案)”并以红色突出显示?当然,为什么不呢?这个值是
$diff
,你可以使用
$larger
来确定加号或减号,所以是的,在这两件事之间,你可以写你想要的。如果我写的内容很有用,并且回答了你的问题,听起来像是这样,请勾选回答,以便社区知道它已经解决了。
Array
(
    [percent] => +75.03%
    [diff] => +1307417
)