我正在研究一個將物件評估為真或假的 php 腳本。物件本身可以嵌套并包含許多物件,例如:
{
"nodeType": "and",
"0": {
"nodeType": "or",
"0": {
"nodeType": "or",
"1": false,
"2": true
},
"3": false
},
"4": true
}
前一個物件應該被評估為真。它也可以嵌套,例如:
{
"nodeType": "and",
"0": {
"nodeType": "or",
"0": {
"nodeType": "and",
"0": {
"nodeType": "or",
"1": false,
"2": true
},
"2": true
},
"3": false
},
"4": true
}
在trincot的幫助下,我已經有了一個可以正常作業的腳本腳本是:
public function findAnswer($expr) {
if (is_bool($expr)) return $expr; // Base case
// If OR, we can stop when we find true (and return true).
// If AND, we can stop when we find false (and return false).
// if($expr["nodeType"] == "not"){
// return ! $expr;
// }
if($expr["nodeType"] == "or"){
$search = true;
}
else{
$search = false;
}
foreach ($expr as $key => $value) {
if ($key !== "nodeType" && $this->findAnswer($value) === $search) {
return $search;
}
}
// If that never happened, return the opposite (false for OR, true for AND)
return !$search;
}
not問題是當有nodeType時腳本不起作用。例子:
{
"nodeType": "and",
"0": {
"nodeType": "or",
"0": {
"nodeType": "not",
"1": false,
},
"3": false
},
"4": false
}
前一個物件應該被評估為假。
有什么建議可以改進腳本也可以與notnodeTypes 一起使用嗎?
編輯:答案適用于某些情況,但不適用于以下情況:
{
"nodeType": "and",
"0": {
"nodeType": "or",
"0": {
"nodeType": "and",
"0": {
"nodeType": "not",
"1": true
},
"2": true
},
"3": false
},
"4": true
}
這被評估為真,而它應該被評估為假。
uj5u.com熱心網友回復:
當運算子為“非”時,我們可以將其他引數視為 NAND 邏輯運算子的引數。因此,如果所有引數都是假的,那么它將被評估為真,否則為假。如果您永遠不會將多個引數傳遞給 NOT 運算子,那么這并沒有真正的區別,但是當需要支持更多引數時,讓它與一些邏輯一起作業是很好的。
這是建議的代碼:
public function findAnswer($expr) {
if (is_bool($expr)) return $expr; // Base case
// If OR, we can stop when we find true (and return true).
// If NAND or NOT, we can stop when we find false (and return false).
// If NOT, negate the outcome. When multiple arguments, perform a NOR operator
$negate = $expr["nodeType"] == "not";
$search = $expr["nodeType"] == "or";
foreach ($expr as $key => $value) {
if ($key !== "nodeType" && $this->findAnswer($value) === $search) {
return $search !== $negate;
}
}
// If that never happened, return the opposite (false for OR, true for AND)
return $search === $negate;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439807.html
上一篇:Laravel升級打破了模型路徑
下一篇:合并php中的重復查詢
