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

基于另一个JSON检查值存在性:PHP循环逻辑错误求助

问题根源

你的代码有三个关键错误:

  1. 匹配逻辑完全错误:你试图用索引$i让$jm和$ja的元素一一对应,但你的需求是检查$jm的value是否存在于$ja的任意value中,不是按位置匹配。而且$jm有5个元素,$ja只有3个,当$i>=3时$ja[$i]不存在,直接导致比较失败。
  2. $is_exist未重置:一旦某个元素把$is_exist设为TRUE,后续循环不会再将其改回FALSE,会导致后面所有元素的STATUS都变成TRUE(但你这里因为索引越界,所以全是FALSE)。
  3. 未处理数组越界:当$i超过$ja的长度时,$ja[$i]返回null,和$rows["value"]比较永远不成立,所以STATUS全为FALSE。
修复后的代码

先把$ja的所有value提取成一个独立数组,用in_array()快速判断存在性,效率更高且逻辑正确:

$json_m = '[
             {"name":"1","value":"1"},
             {"name":"2","value":"2"},
             {"name":"3","value":"3"},
             {"name":"4","value":"4"},
             {"name":"5","value":"5"},
           ]';

$json_a = '[
             {"name":"1-m","value":"1"},
             {"name":"2-m","value":"3"},
             {"name":"3-m","value":"5"},
           ]';

$jm = json_decode($json_m, true);
$ja = json_decode($json_a, true);

// 提取$ja中所有value值,生成快速查找数组
$ja_values = array_column($ja, 'value');

$i = 0;
foreach($jm as $rows ){
    // 每次循环独立判断当前value是否存在
    $is_exist = in_array($rows["value"], $ja_values);
    
    $dataadd = [
        'ID'        => $i,
        'NAME'      => $rows["value"],
        'STATUS'    => $is_exist
    ];
    
    // 打印验证结果,和预期一致
    var_dump($dataadd['STATUS']);
    $i++;
}
效果说明

运行这段代码会输出:

bool(true)
bool(false)
bool(true)
bool(false)
bool(true)

完全符合你的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:05:26