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

PHP遍历JSON数据仅返回第一行问题求助

问题分析与解决方案

你的代码有两个核心问题导致只返回一行数据,甚至可能输出错误结果:

1. 错误在foreach中额外维护索引$i

foreach ($proveedores as $proveedor) 已经在逐个遍历$proveedores数组里的每一条供应商数据,$proveedor本身就是当前循环的完整单条记录,你完全不需要额外用$i来做索引访问。你写的$proveedor[$i]['cuit']是错误的——当$i递增后,单条记录$proveedor根本没有对应索引的键,这会导致后续循环的判断全部失效,最终只能保留第一次循环的结果。

2. 每次循环都覆盖结果变量,且找到匹配后未终止循环

不管有没有找到匹配的CUIT,你在每次循环里都会重新赋值$proveedorArray,这意味着最后只有最后一次循环的结果会被输出。更糟的是,即使找到了匹配的记录,循环还会继续执行,后续不匹配的记录会直接覆盖掉之前的正确结果。


修正后的代码

if (!empty($_GET["cuit"])){ 
    $cuit = $_GET["cuit"]; 
    $directorioDocs = 'data/docs/'; 
    $data = file_get_contents("data/data.json"); 
    $proveedores = json_decode($data, true); 
    // 先初始化默认结果:未找到匹配的CUIT
    $proveedorArray = array("Data" => "No se encontró el CUIT ingresado"); 

    foreach ($proveedores as $proveedor) { 
        // 直接访问当前循环项的cuit字段,不需要额外索引
        if ($cuit === $proveedor['cuit']) { 
            $proveedorArray = array( 
                "cuit" => $proveedor['cuit'],
                // 如果需要返回其他字段,在这里添加即可
                // "nombre" => $proveedor['nombre'], 示例
            ); 
            // 找到匹配项后立即终止循环,既提升效率又避免结果被覆盖
            break; 
        } 
    } 
    echo json_encode($proveedorArray); 
} else { 
    $proveedorArray = array("Data" => "Debe ingresar un cuit"); 
    echo json_encode($proveedorArray); 
}

关键修正点说明

  • 移除了多余的$i变量,直接通过$proveedor['cuit']访问当前循环记录的字段;
  • 提前初始化默认结果,避免循环结束后无匹配项时返回错误提示;
  • 找到匹配项后用break终止循环,防止后续循环覆盖正确结果,同时减少不必要的遍历;
  • 使用严格相等===代替==,避免类型转换导致的意外匹配(比如字符串和数字的误判)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:23:11