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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:45:03