PHP如何将用户输入的数字拆分为键逐层查询多维数组对应值
可直接运行的实现方案
你后续参考封装的searchByNumber函数逻辑方向是正确的,只需要补全键存在性校验和最终结果校验就能满足需求,修复后的完整代码如下:
<?php // 多维数组结构 $arr = [ 0 => [ 0 => "1-1", 1 => "1-2", 2 => "1-3", 3 => [ 0 => "1-4-1", 1 => "1-4-2", 2 => "1-4-3" ] ], 1 => [ 0 => "2-1", 1 => "2-2", 2 => "2-3" ], 2 => [ 0 => "3-1", 1 => "3-2", 2 => "3-3", 3 => [ 0 => "3-4-1", 1 => "3-4-2" ] ], ]; function searchByNumber($array, $input){ $result = $array; $inputLength = strlen($input); for ($i = 0; $i < $inputLength; $i++) { $currentKey = $input[$i]; // 先判断是否为数组、且键存在,避免触发PHP警告 if (is_array($result) && array_key_exists($currentKey, $result)) { $result = $result[$currentKey]; } else { return "Does not exists"; } } // 遍历完所有输入后,如果结果还是数组,说明没有查到最终的普通值 if (is_array($result)) { return "Does not exists"; } return $result; } // 测试用例:输入230 echo searchByNumber($arr, "230"); // 输出 3-4-1 // 测试用例:输入11 echo searchByNumber($arr, "11"); // 输出 2-2 // 测试用例:输入不存在的路径035 echo searchByNumber($arr, "035"); // 输出 Does not exists
主要改动说明
- 新增了每一层的键存在性校验,用
array_key_exists判断当前数字是否为对应层级数组的合法键,避免PHP抛出未定义数组键的警告 - 遍历完所有输入字符后新增了结果类型校验,如果最终结果还是数组,说明查询路径没有走到最终的普通值,按不存在处理
- 函数改为返回结果而非直接在内部输出,复用性更高
你最早写的递归版本问题在于硬编码拆分了3个键,且循环逻辑异常没有按顺序逐层匹配,所以会输出不符合预期的结果,用上述循环版本即可满足需求。
内容的提问来源于stack exchange,提问作者codepnk
相关产品推荐
相关产品推荐

