如何根据另一个JSON字符串检查JSON字符串



我想用这些JSON字符串做一个循环。

$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"},
]';

我在$json_m上做了一个循环。如果两个JSON中都存在该值,我将参数设置为TRUE

这是我当前的代码:

$jm         = json_decode($json_m, true);
$ja         = json_decode($json_a, true);
$i          = 0;
$is_exist   = FALSE;

foreach($jm as $rows ){

if($rows["value"] == $ja[$i]["value"]){
$is_exist   = TRUE;
}

$dataadd    = array (   'ID'        => $i,
'NAME'      => $rows["value"],
'STATUS'    => $is_exist
);
$i++;

}

这个脚本返回为FALSE,根据我的例子,STATUS应该返回如下:

TRUE
FALSE
TRUE
FALSE
TRUE

我错过什么了吗?非常感谢您的帮助。

您可以像下面的一样使用array_search

$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":"2-m","value":"3"},  
{"name":"3-m","value":"5"}
]';
$jm         = json_decode($json_m, true);
$ja         = json_decode($json_a, true);
$javal = array_unique(array_column($ja, 'value'));

$is_exist   = FALSE;
$dataadd =[];
foreach($jm as $i=> $rows ){
$is_exist   = FALSE;
if(is_numeric(array_search($rows["value"], $javal))) {
$is_exist   = TRUE; 
}
$dataadd[]    = array (   'ID'        => $i,
'NAME'      => $rows["value"],
'STATUS'    => $is_exist
);
}
print_r($dataadd);                                  

使用array_column$ja中提取所有value值,可以让您的生活更轻松;然后可以使用in_array进行搜索。然后,您可以使用array_map迭代$jm以生成$dataadd值的数组:

$ja_values = array_column($ja, 'value');
$dataadd = array_map(fn ($arr, $idx) => array('ID' => $idx, 'NAME' => $arr['value'], 'STATUS' => in_array($arr['value'], $ja_values)), $jm, array_keys($jm));
var_export($dataadd);

输出(用于您的样本数据(:

array (
0 => 
array (
'ID' => 0,
'NAME' => '1',
'STATUS' => true,
),
1 => 
array (
'ID' => 1,
'NAME' => '2',
'STATUS' => false,
),
2 => 
array (
'ID' => 2,
'NAME' => '3',
'STATUS' => true,
),
3 => 
array (
'ID' => 3,
'NAME' => '4',
'STATUS' => false,
),
4 => 
array (
'ID' => 4,
'NAME' => '5',
'STATUS' => true,
),
)

最新更新