我想用这些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,
),
)