2012-11-30 62 views
2

我有這樣CakePHP的設置::在條件特殊字符提取

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

    ) 
... 

一個數組,並想提取存儲在「單位」的連續劇陣列(例如:ST109347005)這樣

$newarray = Set::extract($data,'/Unit[Unit>UK1=MOLDSHELF1][Unit>UK3=MOLDTOOL]/Unit'); 

哪個不行,因爲>是保留字符。我不確定使用這種語法的語法是什麼。我像它會是這樣的(不工作)

$newarray = Set::extract($data,'/Unit[Unit\>UK1=MOLDSHELF1][Unit\>UK3=MOLDTOOL]/Unit'); 

感謝

回答

1

在然後結束它歸結爲Set::matches,將接收Unit>UK1=MOLDSHELF1爲條件,並使用常規評估它表達。不支持轉義字符,因此match將把>作爲運算符,因此它將失敗。

您需要重新命名鍵,至少暫時用於提取,但是當您已經遍歷所有條目時,您可以輕鬆地手動比較鍵並跳過重命名並通過Set::extract提取。理想情況下,您應該永久重命名密鑰。

+0

這就是我暫時解決問題的方法,只是用_替換了>。不過,我希望有一個更優雅的解決方案。我在xpath上做了一些閱讀,並認爲>可能會工作,但沒有。 \ x3e也沒有。哦,謝謝。 – Matt

+0

問題是,在從條件中提取值和運算符後,'Set :: matches'將使用簡單的布爾操作來比較左手和右手的值,即使用'==','>','<'這就是爲什麼甚至連RegEx兼容替代字符都無法正常工作的原因。 – ndm