2

我正在尝试解析通过 PHP 中的 API 提供的“规则字符串”。

鉴于我有一系列项目,例如

$items = [41, 42, 51, 54, 65, 12];

我希望评估这个表达式

({41} AND {51}) OR ({31} AND {42})

在这种情况下,它应该返回 true,因为 $items 数组同时包含 41 和 51 项。

我开始使用https://github.com/nette/tokenizer库创建一个标记器,目前让它将字符串解析为一个标记数组。

array:25 [
  0 => array:3 [
    0 => "("
    1 => 0
    2 => 1
  ]
  1 => array:3 [
    0 => "{"
    1 => 1
    2 => 2
  ]
  2 => array:3 [
    0 => "41"
    1 => 2
    2 => 3
  ]
  3 => array:3 [
    0 => "}"
    1 => 4
    2 => 4
  ]
  4 => array:3 [
    0 => " "
    1 => 5
    2 => 8
  ]
  5 => array:3 [
    0 => "AND"
    1 => 6
    2 => 5
  ]
  6 => array:3 [
    0 => " "
    1 => 9
    2 => 8
  ]
  7 => array:3 [
    0 => "{"
    1 => 10
    2 => 2
  ]
  8 => array:3 [
    0 => "51"
    1 => 11
    2 => 3
  ]
  9 => array:3 [
    0 => "}"
    1 => 13
    2 => 4
  ]
  10 => array:3 [
    0 => ")"
    1 => 14
    2 => 7
  ]
  11 => array:3 [
    0 => " "
    1 => 15
    2 => 8
  ]
  12 => array:3 [
    0 => "OR"
    1 => 16
    2 => 6
  ]
  13 => array:3 [
    0 => " "
    1 => 18
    2 => 8
  ]
  14 => array:3 [
    0 => "("
    1 => 19
    2 => 1
  ]
  15 => array:3 [
    0 => "{"
    1 => 20
    2 => 2
  ]
  16 => array:3 [
    0 => "31"
    1 => 21
    2 => 3
  ]
  17 => array:3 [
    0 => "}"
    1 => 23
    2 => 4
  ]
  18 => array:3 [
    0 => " "
    1 => 24
    2 => 8
  ]
  19 => array:3 [
    0 => "AND"
    1 => 25
    2 => 5
  ]
  20 => array:3 [
    0 => " "
    1 => 28
    2 => 8
  ]
  21 => array:3 [
    0 => "{"
    1 => 29
    2 => 2
  ]
  22 => array:3 [
    0 => "42"
    1 => 30
    2 => 3
  ]
  23 => array:3 [
    0 => "}"
    1 => 32
    2 => 4
  ]
  24 => array:3 [
    0 => ")"
    1 => 33
    2 => 7
  ]
]

然而,这是我的才能耗尽的地方,我不确定如何处理令牌,以便我可以针对我的 $items 数组运行条件。

可能是我完全错误地处理了这个问题。

4

0 回答 0