基于另一个JSON检查值存在性:PHP循环逻辑错误求助
问题根源
你的代码有三个关键错误:
- 匹配逻辑完全错误:你试图用索引
$i让$jm和$ja的元素一一对应,但你的需求是检查$jm的value是否存在于$ja的任意value中,不是按位置匹配。而且$jm有5个元素,$ja只有3个,当$i>=3时$ja[$i]不存在,直接导致比较失败。 $is_exist未重置:一旦某个元素把$is_exist设为TRUE,后续循环不会再将其改回FALSE,会导致后面所有元素的STATUS都变成TRUE(但你这里因为索引越界,所以全是FALSE)。- 未处理数组越界:当
$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
相关产品推荐
相关产品推荐

