我有两个JSON对象,一个用于雄性遗传学,另一个用于雌性遗传学。如下所示:
男:
$male='{
"Bell-Albino":"Bb",
"Rainwater-Albino":"null",
"Tremper-Albino":"null",
"Murphys-Patternless":"null",
"Eclipse":"Ee",
"Marble-Eye":"null",
"Blizzard":"Zz",
"Mack-Snow":"Mm",
"Super-Snow":"null",
"Gem-Snow":"null",
"TUG-Snow":"null",
"Line-Bred-Snow":"null",
"Enigma":"null",
"White-and-Yellow":"null",
"Wildtype":"null",
"Giant":"null"
}';
女性:
$female='{
"Bell-Albino":"BB",
"Rainwater-Albino":"null",
"Tremper-Albino":"null",
"Murphys-Patternless":"null",
"Eclipse":"null",
"Marble-Eye":"null",
"Blizzard":"zz",
"Mack-Snow":"mm",
"Super-Snow":"null",
"Gem-Snow":"null",
"TUG-Snow":"null",
"Line-Bred-Snow":"null",
"Enigma":"null",
"White-and-Yellow":"null",
"Wildtype":"null",
"Giant":"null"
}';
如果我们从Male
对象中取Eclipse
key
,我们就得到了"Eclipse":"Ee"
,如果我们对Female
对象也这样做,我们就有了"Eclipse":"null"
。
在遗传学中,EE
表示显性,Ee
表示隐性,ee
表示无效,但可用于基因计算。
我需要做的是检查两个对象的keys
,如果一个对象的值为而不是"null"
(这意味着它可能是EE or Ee
)的key
(例如Eclipse
),则需要检查另一个对象,并用小写字母(如ee
)替换另一个物体中的null
值。
我知道数组相交(当使用数组时),但我甚至不确定这是否是正确的使用方法?
这对我来说很难解释,也很难编码,所以很抱歉我说了一点。如果我需要澄清什么,请这样说。
//convert to arrays
$male = json_decode($male, true);
$female = json_decode($female, true);
foreach( $male as $key => $value ) {
if ( $value != 'null' && $female[$key] == 'null' ) {
$female[$key] = strtolower($value);
} else {
if ($female[$key] != 'null' && $value == 'null')
$male[$key] = strtolower($female[$key]);
}
}
另一个选项。如果一个值是'null'
,你可以用另一个性别的小写值覆盖它,而不检查它是什么。如果另一个值也是'null'
,什么都不会改变,如果不是,你会得到它的小写版本。
$genders = array_map('json_decode', [$male, $female]);
foreach ($genders as $gender => $values) {
foreach ($values as $key => $value) {
// overwrite all nulls with lowercase corresponding value of other gender
if ($value == 'null') $genders[$gender]->$key = strtolower($genders[!$gender]->$key);
}
}
list($male, $female) = $genders;
$male = json_decode($male);
$female = json_decode($female);
foreach($male as $key => $value){
if(array_key_exists($key, $female)){
if($value === "null"){
$male->{$key} = $female->{$key};
}
}
}
foreach($female as $key => $value){
if(array_key_exists($key, $male)){
if($value === "null"){
$female->{$key} = $male->{$key};
}
}
}
print_r($male);
print_r($female);
// convert back to json if you need to?
$male = json_encode($male);
$female = json_encode($female);
让我知道这是否符合要求:
for(i in $male){
if ($male[i] != 'null' && $female[i] == 'null'){
$female[i] = 'ee';
}
}
for(i in $female){
if ($female[i] != 'null' && $male[i] == 'null'){
$male[i] = 'ee';
}
}
你可以在这里测试:
https://jsfiddle.net/tz746xdz/1/
和一个PHP版本:
$maleDecode = json_decode($male);
$femaleDecode = json_decode($female);
foreach ($maleDecode as $key=>$val){
if ($maleDecode->$key != 'null' and $femaleDecode->$key == 'null')
$femaleDecode->$key = 'ee';
}
foreach ($femaleDecode as $key=>$val){
if ($femaleDecode->$key != 'null' and $maleDecode->$key == 'null')
$maleDecode->$key = 'ee';
}