2012-06-17 207 views
0

請幫我,我有一個案件,必須立即解決,由於嚴格的截止日期.. :( 我有一個想法,使用preg_match或preg_split解決這個問題,並嘗試了很多方式來使用它但還是不知道如何使用它。 也許有人能指導我來說,這種情況下,我就可以得到有關如何使用的preg_match或使preg_split更多的瞭解。與mongoDB陣列codeigniter

//此字符串從

$temp = "{foo:bar,bar:foo},{_id:1,nama:1,nim:1}"; 

//如何將它分配給數組,所以結果如下

Array 
(
[0]=>foo:bar,bar:foo 
[1]=>_id:1,nama:1,nim:1 
) 

//也是第二串

$temp2 = "_id:1,nama:1,nim:1"; 

//如何把它分配給數組這樣的結果會是這樣

Array 
(
[0] => _id 
[1] => nama 
[2] => nim 
) 

謝謝您的指導和幫助。 。:)

回答

0

注意鍵和字符串被引用,並且在$ temp周圍的[]使它成爲一個數組,t他的第二部分我將array[1]轉換成json字符串,然後返回到數組中,然後使用array_keys創建一個鍵數組。

​​

json_encodejson_decodearray_keys

0

代碼:

<?php 

$str1 = "{foo:bar,bar:foo},{_id:1,nama:1,nim:1}"; 
preg_match_all('/\{(.+?)\},?/', $str1, $matches); 
var_dump($matches[1]); 

$str2 = "_id:1,nama:2,nim:3"; 
preg_match_all('/(\w+)\:\w+,?/', $str2, $matches); 
var_dump($matches[1]); 

?> 

結果:

array 
    0 => string 'foo:bar,bar:foo' (length=15) 
    1 => string '_id:1,nama:1,nim:1' (length=18) 
array 
    0 => string '_id' (length=3) 
    1 => string 'nama' (length=4) 
    2 => string 'nim' (length=3) 

參考:

釋:

所有的
  1. 首先,我們應該決定要使用哪個函數。正如手冊所述:

    preg_match()返回模式匹配次數。這將是 要麼0次(不匹配)或1時間,因爲preg_match()將停止 搜索後的第一場比賽。 preg_match_all()相反將 繼續,直到它達到主題的末尾。 preg_match()返回 FALSE如果發生錯誤。

    preg_split()返回包含對象的子陣列沿由圖案匹配邊界分割 。

    作爲你的目標是捕捉大括號之間的內容,我選擇 preg_match_all輕鬆處理任務。當然,你可以用 preg_split做硬盤的方式:)

  2. 前來模式:它是所有關於Regular Expression
    1. ​​:我們抓住一對大括號裏面的內容。 +站立跳過空的括號象{}。嘗試將一些空對{}納入$str1並將+更改爲*並查看會發生什麼情況。還有?標誌指定非貪婪。 +?表示我們不需要{foo}{bar}之類的foo}{bar之類的東西,但僅需要foobar,?表示可以有逗號或不可以。
    2. (\w+)\:\w+,?:我們捕捉key一對key:value

希望這有助於:)