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
将使用简单的布尔运算比较左侧和右侧的值,即使用=
,
,