php如何求带字符串类型和整数类型的最大值和最小值

如何求带字符串类型和整数类型的最大值和最小值

<?php
    $arr1=array('xq'=>'第四学期','name'=>'张一','C语言'=>88,'java语言'=>98,'数据库'=>78,'数据结构'=>96,'php'=>99,'软件工程'=>84,'UML'=>83);

    $arr2=array('xq'=>'第四学期','name'=>'张二','C语言'=>88,'java语言'=>77,'数据库'=>87,'数据结构'=>96,'php'=>98,'软件工程'=>84,'UML'=>83);
    $arr3=array('xq'=>'第四学期','name'=>'张三','C语言'=>88,'java语言'=>93,'数据库'=>76,'数据结构'=>96,'php'=>97,'软件工程'=>84,'UML'=>83);
    
    $sum1=0;
    $sum2=0;
    $sum3=0;
    
         foreach($arr1 as $array1){
        if(is_numeric($array1)){
            $sum1=$sum1+$array1;
            $max1=max($arr1);
            $min1=min($arr1);
        }else{
            continue;
        }
    }
        foreach($arr2 as $array2){
        if(is_numeric($array2)){
            $sum2=$sum2+$array2;
            $max2=max($arr2);
            $min2=min($arr2);
        }
    }
    
        foreach($arr3 as $array3){
        if(is_numeric($array3)){
            $sum3=$sum3+$array3;
            $max3=max($arr3);
            $min3=min($arr3);
        }
    }

    echo $arr1['name'].'同学'.$arr1['xq'].'的平均分是:'.($sum1/(count($arr1)-2)).'分<BR>'.'最高分是:'.$max1.'分<BR>'.'最低分是:'.$min1.'分<BR>';
    echo $arr2['name'].'同学'.$arr2['xq'].'的平均分是:'.($sum2/(count($arr2)-2)).'分<BR>'.'最高分是:'.$max2.'分<BR>'.'最低分是:'.$min2.'分<BR>';                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
    echo $arr3['name'].'同学'.$arr3['xq'].'的平均分是:'.($sum3/(count($arr3)-2)).'分<BR>'.'最高分是:'.$max3.'分<BR>'.'最低分是:'.$min3.'分<BR>';
?>

努力の小熊结合chatgpt的答案:
在给定的 PHP 代码中,使用了 foreach 循环遍历数组并判断数组元素是否为数值类型,累加数值类型元素的和,并使用 max 和 min 函数获取最大值和最小值。但是这种方式需要分别在每个数组中进行循环,代码重复度较高。

下面是一个更简洁的实现方式,利用 array_column 函数、array_filter 函数和 is_numeric 函数对数组进行处理,可以直接得到字符串类型和整数类型的最大值和最小值:

$arr1 = array('xq'=>'第四学期','name'=>'张一','C语言'=>88,'java语言'=>98,'数据库'=>78,'数据结构'=>96,'php'=>99,'软件工程'=>84,'UML'=>83);
$arr2 = array('xq'=>'第四学期','name'=>'张二','C语言'=>88,'java语言'=>77,'数据库'=>87,'数据结构'=>96,'php'=>98,'软件工程'=>84,'UML'=>83);
$arr3 = array('xq'=>'第四学期','name'=>'张三','C语言'=>88,'java语言'=>93,'数据库'=>76,'数据结构'=>96,'php'=>97,'软件工程'=>84,'UML'=>83);

// 获取各个数组中所有成绩的数组
$scores1 = array_filter(array_column($arr1, null), 'is_numeric');
$scores2 = array_filter(array_column($arr2, null), 'is_numeric');
$scores3 = array_filter(array_column($arr3, null), 'is_numeric');

echo $arr1['name'].'同学'.$arr1['xq'].'的平均分是:'.(array_sum($scores1)/count($scores1)).'分<BR>'.'最高分是:'.max($scores1).'分<BR>'.'最低分是:'.min($scores1).'分<BR>';
echo $arr2['name'].'同学'.$arr2['xq'].'的平均分是:'.(array_sum($scores2)/count($scores2)).'分<BR>'.'最高分是:'.max($scores2).'分<BR>'.'最低分是:'.min($scores2).'分<BR>';
echo $arr3['name'].'同学'.$arr3['xq'].'的平均分是:'.(array_sum($scores3)/count($scores3)).'分<BR>'.'最高分是:'.max($scores3).'分<BR>'.'最低分是:'.min($scores3).'分<BR>';

在这种实现方式中,首先使用 array_column 函数获取每个数组中所有值,并使用 array_filter 函数和 is_numeric 函数过滤出数值类型元素,然后直接调用 array_sum、max 和 min 函数即可得到相应的统计结果。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7688172
  • 这篇博客你也可以参考下:PHP网页改动后刷新页面还是老样子,要隔一段时间才能正确显示的原因及处理办法
  • 除此之外, 这篇博客: php 判断字符串是否包含另一个字符串方法总结中的 判断某字符串中是否包含某字符串的方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • strpos() 函数返回字符串在另一个字符串中第一次出现的位置,如果没有找到该字符串,则返回 false。
    语法
    strpos(string,find,start)   
    参数 描述
    string 必需。规定被搜索的字符串。
    find 必需。规定要查找的字符。
    start 可选。规定开始搜索的位置。

    注释:该函数对大小写敏感。如需进行对大小写不敏感的搜索,请使用 stripos()函数。
    例子:

    //利用 strpos函数 注意要用 !==
    
    $data="SQLSTATE";
    $msg="SQLSTATE[42000]: Syntax error or access violation: 1064 You ";
    if(strpos($msg,$data) !== false){
    	echo '包含SQLSTATE';
    }else{
    	echo '不包含SQLSTATE';
    }