PHP根据输入值求和匹配数组对应名称的实现方法
PHP数值求和匹配对应名称功能实现
基础示例
输入代码如下:
$input = '500'; $array1 = array("200" => 'jhon',"300" => 'puppy',"50" => 'liza',"150" => 'rehana',"400" => 'samra',"100" => 'bolda',);
预期输出格式参考:
jhon,puppy and bolda,rehana
实现逻辑要求
- 提前建好数值和对应名称的映射数组,初始化空数组
$names用来存储匹配到的名称 - 用
foreach循环遍历映射数组,每遍历到一项就从当前剩余的输入值里扣减该项对应的数值,直到输入值被扣到0就终止遍历 - 所有参与扣减、凑出输入值总和的项,对应的名称都要放进
$names数组 - 最终输出判断规则:
- 如果
$names不为空,调用implode函数用and做分隔符把名称拼接成字符串输出 - 如果
$names为空,直接输出No match found表示没有找到匹配的项
- 如果
参考实现代码
<?php // 初始化输入值和数值-名称映射数组 $input = '500'; $remain = intval($input); $numNameMap = array( "200" => 'jhon', "300" => 'puppy', "50" => 'liza', "150" => 'rehana', "400" => 'samra', "100" => 'bolda', ); $matchedNames = []; // 遍历数组完成数值扣减匹配 foreach ($numNameMap as $value => $name) { if ($remain <= 0) { break; } $value = intval($value); if ($value <= $remain) { $remain -= $value; $matchedNames[] = $name; } } // 按规则输出结果 if (!empty($matchedNames)) { echo implode(' and ', $matchedNames); } else { echo "No match found"; }
说明:按照给定的顺序遍历逻辑,上述示例输入运行后会输出
jhon and puppy,如果需要得到参考输出里带逗号分组的格式,调整遍历顺序或者增加多组合匹配规则即可,核心扣减逻辑完全符合要求。
内容的提问来源于stack exchange,提问作者qaiserjutt
相关产品推荐
相关产品推荐

