我正在尝试合并两个JSON,但是如果找到它的话,我不想覆盖它的值,如果找到它,我想添加该值。例如,假设我有三个值。
$a = "[{"base":"10","touch":true,"flatfooted":true}]"
$b = "[{"natural armor":"2","touch":false,"flatfooted":true}]"
$c = "[{"natural armor":"3","touch":false,"flatfooted":true}]"
我想得到以下结果:
"[{"base":"10","touch":true,"flatfooted":true},{"natural armor":"5","touch":false,"flatfooted":true}]"
但是我迷路了。
感谢您的帮助。
另外,提前要求避免询问另一个问题:如何将每个JSON对象转换为不同的数组?
假设结果是JSON,比如
$final[0]['base'] = 10,
$final[0]['touch'] = true,
$final[0]['flatfooted'] = true,
$final[1]['natural armor'] = 5,
$final[1]['touch'] = false,
$final[1]['flatfooted'] = true
答案 0 :(得分:0)
这是一个开始,我无法完成,因为我必须离开。祝你好运!
<?php
$a = '[{"base":"10","touch":true,"flatfooted":true}]';
$b = '[{"natural armor":"2","touch":false,"flatfooted":true}]';
$c = '[{"natural armor":"3","touch":false,"flatfooted":true}]';
//Decode values to arrays and get first item.
$a = json_decode($a, true)[0];
$b = json_decode($b, true)[0];
$c = json_decode($c, true)[0];
//Put them all in a array
$abc = [$a, $b, $c];
//Compare keys of all arrays, and put the ones with no diffs in a array
$noDiff = [];
foreach ($abc as $idx => $character) {
//Skip first because we use it in the foreach
for ($i = 1; $i < count($abc); $i++) {
$diff = array_diff_key($character, $abc[$i]);
if (empty($diff)) {
$noDiff[] = $character;
$noDiff[] = $abc[$i];
}
}
//Remove item from $abc and reset index keys
array_splice($abc, $idx, 1);
}
//$noDiff will now contain array $b and $c and we know they both have the same keys.
//We need to be sure natural armor contains numeric values and that touch and flatfooted
//have both the same boolean value.
$merged = [];
$canCombine = true;
foreach ($noDiff[0] as $key => $value) {
if (!is_numeric($value) || is_numeric($noDiff[1][$key]) {
$canCombine = false;
} else {
}
}
echo "<pre>";
var_dump(
$noDiff
);
echo "</pre>";
答案 1 :(得分:-1)
您可以使用以下命令将任何JSON字符串转换为数组:
Preconditions
如果您希望每个JSON字符串最终作为数组的单独元素,您可以使用:
$result = json_decode($jsonString,true) ;
因此,在您的情况下,您可以使用:
$final[] = json_decode($jsonString,true) ;
虽然我会推荐一个循环,以防你不总是有三个(例如$ a,$ b&amp; $ c)。
您应该始终在每个json_decode()之后检查json_last_error(),以确保您没有生成错误。
答案 2 :(得分:-1)
由于JSON是序列化数据,您需要解析需要合并的两个json对象,然后添加任何字段的结果,然后您可以更新其中一个原始json对象的值并序列化数据。
我之前没有使用过PHP,但是这篇文章是我在PHP中解析json对象时发现的。 http://php.net/manual/en/function.json-decode.php
希望有所帮助。
答案 3 :(得分:-1)
1)相同的AC奖金不要叠加。这意味着你不能为一个单位添加两个天生盔甲。但是你可以做(基础+灵巧+自然+大小+护甲+盾牌)
2)为什么“触摸”和“平脚”布尔?您只需添加AC的不同子集
touch = base + dexterity + natural + size
平脚=基地+护甲+盾
3)如果你确实在谈论DnD,我希望你想为自己和你的朋友制作一个工具,因为你不能只为DnD发布一个工具,它是受版权保护的。