CakePHP Set::在条件中使用特殊字符提取

CakePHP Set::在条件中使用特殊字符提取,cakephp,escaping,set,extract,Cakephp,Escaping,Set,Extract,我有一个这样的数组 Array ( [0] => Array ( [Unit] => Array ( [Unit] => ST109347005 [SplitCnt] => 0 [UWin] => [Unit>Part] => MOLDTOOLREPAIR

我有一个这样的数组

Array
(
[0] => Array
    (
        [Unit] => Array
            (
                [Unit] => ST109347005
                [SplitCnt] => 0
                [UWin] => 
                [Unit>Part] => MOLDTOOLREPAIR
                [Unit>UK1] => MOLDSHELF1
                [Unit>UK2] => 28149813MH001
                [Unit>UK3] => MOLDTOOL
            )

    )
...
$newarray = Set::extract($data,'/Unit[Unit>UK1=MOLDSHELF1][Unit>UK3=MOLDTOOL]/Unit');
并希望像这样提取存储在“单元”(例如:ST109347005)中的序列数组

Array
(
[0] => Array
    (
        [Unit] => Array
            (
                [Unit] => ST109347005
                [SplitCnt] => 0
                [UWin] => 
                [Unit>Part] => MOLDTOOLREPAIR
                [Unit>UK1] => MOLDSHELF1
                [Unit>UK2] => 28149813MH001
                [Unit>UK3] => MOLDTOOL
            )

    )
...
$newarray = Set::extract($data,'/Unit[Unit>UK1=MOLDSHELF1][Unit>UK3=MOLDTOOL]/Unit');
这不起作用,因为>是保留字符。我不确定什么样的语法可以让它工作。我想象它会是这样的(这不起作用)


谢谢

最后它归结为
Set::matches
,它将接收
Unit>UK1=MOLDSHELF1
作为条件,并使用正则表达式对其求值。不支持转义字符,因此
match
会将
视为运算符,因此它将失败


您需要重命名这些键,至少暂时是为了提取,但是当您已经对所有条目进行迭代时,您可以轻松地手动比较这些键,并通过
Set::extract
跳过重命名和提取。理想情况下,您应该永久地重命名密钥。

这就是我临时解决问题的方法,只是将>替换为一个

。然而,我希望有一个更优雅的解决方案。我读了一些关于xpath的书,认为可能会有用,但没有。\x3e也没有。哦,好的,谢谢。问题是在从您的条件中提取值和运算符之后,
Set::matches
将使用简单的布尔运算比较左侧和右侧的值,即使用
=