【问题标题】:Find max from an array that created from a form submission从表单提交创建的数组中查找最大值
【发布时间】:2016-08-01 07:13:49
【问题描述】:

我创建了一个表单并将其作为数组提交,

array(
 'name'   => 'John',
 'score1' => '50',
 'score2' => '90',
 'score3' => '75',
);

我想从提交的数组中搜索最大值,但它总是被检测为字符串。所以结果总是John

<form action="" method='post'>
<?php
$dr     = array('Brian','Mike','John');
$prd    = array('score1','score2','score3');

foreach($dr AS $d){
    echo "<input name=txt[$d][dr] value='".$d."' size=3 readonly>";

    foreach($prd AS $p){
        echo "<input type=text name=txt[$d][".$p."] size=3 value=0> ";
    }
    echo "<hr>";
}

?>
<input type='submit' name='submit'>
</form>
<?php
if($_POST['submit']){
    foreach($_POST['txt'] AS $v){
        $max = max($v);
        $v['max'] = $max;
        var_dump($v);
    }
}
?>

代码: http://phpfiddle.org/lite/code/9tnu-p6yd

【问题讨论】:

    标签: php arrays forms type-conversion


    【解决方案1】:

    您将一个字符串数组提供给max 函数,在这种情况下,该函数的行为将与文档http://php.net/manual/en/function.max.php 中的描述相同

    不同类型的值将使用标准进行比较 比较规则。例如,将比较一个非数字字符串 到一个整数,就好像它是 0,但多个字符串值将是 按字母数字进行比较。返回的实际值将是 未应用转换的原始类型。

    替换这部分代码

    if($_POST['submit']){
        foreach($_POST['txt'] AS $v){
            $max = max($v);
            $v['max'] = $max;
            var_dump($v);
        }
    }
    

    有了这个

    if($_POST['submit']) {
        foreach($_POST['txt'] AS $v) {
            $scores = [];
            foreach ($v as $key => $val) {
                if (preg_match('/^score/i', $key)) {
                    $scores[] = (int)$val;
                }
            }
    
            $max = max($scores);
            $v['max'] = $max;
            var_dump($v);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 2012-08-14
      • 2019-02-28
      • 2015-09-29
      • 2014-11-02
      相关资源
      最近更新 更多