You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP多维数组提取所有质数年龄的函数问题求助

问题分析与解决方案

你的函数只返回第一个匹配项的核心原因是循环内使用了return语句——一旦执行return,函数会立刻终止并返回结果,后续的年龄元素根本没机会被遍历判断。

修正后的实现代码

function findPrimes(){
    $people = [
        [
            'name'  => 'Joseph Richard',
            'age'   => 23,
            'city'  => 'Chicago',
            'level' => 'Senior',
        ],
        [
            'name'  => 'John Doe',
            'age'   => 22,
            'city'  => 'New York',
            'level' => 'Pleno',
        ],
        [
            'name'  => 'Tess',
            'age'   => 21,
            'city'  => 'San Diego',
            'level' => 'Junior',
        ],
        [
            'name'  => 'Steph Morgan',
            'age'   => 20,
            'city'  => 'Miami',
            'level' => 'Junior',
        ],
        [
            'name'  => 'Ken Junior Smith',
            'age'   => 23,
            'city'  => 'Los Angeles',
            'level' => 'Senior',
        ],
        [
            'name'  => 'Walter Scott',
            'age'   => 24,
            'city'  => 'Seattle',
            'level' => 'TechLead' 
        ],
        [
            'name'  => 'Diego Maradona',
            'age'   => 25,
            'city'  => 'Austin',
            'level' => 'TechLead' 
        ],
        [
            'name'  => 'Messi',
            'age'   => 26,
            'city'  => 'Portland',
            'level' => 'Pleno' 
        ],
        [
            'name'  => 'Hardin Scott',
            'age'   => 19,
            'city'  => 'Houston',
            'level' => 'Senior' 
        ],
    ];

    $primeAges = []; // 初始化数组存储所有质数年龄
    $ages = array_column($people, 'age');

    foreach ($ages as $age) {
        $isPrime = true;

        // 处理质数判断的边界情况
        if ($age <= 1) {
            $isPrime = false;
        } elseif ($age !== 2) {
            for($i = 2; $i <= sqrt($age); $i++) {
                if($age % $i == 0) {
                    $isPrime = false;
                    break; // 找到因数后立即跳出循环,提升效率
                }
            }
        }

        // 是质数就加入结果数组
        if ($isPrime) {
            $primeAges[] = $age;
            // 如果需要返回描述文本,替换成:$primeAges[] = "$age is prime number";
        }
    }

    return $primeAges;
}

// 输出结果
$primes = findPrimes();
echo "所有质数年龄:" . implode(', ', $primes);

关键改动说明

  1. 移除循环内的return:改用数组$primeAges收集所有符合条件的质数,避免函数提前终止
  2. 优化质数判断逻辑:
    • 补充了小于等于1的数不是质数的判断
    • 找到因数后用break跳出循环,减少不必要的计算
  3. 统一返回结果:遍历完所有年龄后,返回存储了所有质数的数组,最后通过implode将数组转为易读的字符串输出

内容的提问来源于stack exchange,提问作者Shirley Oliveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:35:19