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);
关键改动说明
- 移除循环内的
return:改用数组$primeAges收集所有符合条件的质数,避免函数提前终止 - 优化质数判断逻辑:
- 补充了小于等于1的数不是质数的判断
- 找到因数后用
break跳出循环,减少不必要的计算
- 统一返回结果:遍历完所有年龄后,返回存储了所有质数的数组,最后通过
implode将数组转为易读的字符串输出
内容的提问来源于stack exchange,提问作者Shirley Oliveira
相关产品推荐
相关产品推荐

