2013-05-07 203 views
0

我有這樣的字符串:PHP爆炸和陣列

clid=7 cid=55164 client_database_id=90507 client_nickname=Leandro client_type=0|clid=9 cid=55164 client_database_id=90507 client_nickname=Leandro1 client_type=0|clid=10 cid=55164 client_database_id=90507 client_nickname=Leandro2 client_type=0 

的 '|'是客戶的分隔符。 我需要像一個數組:

echo Client[0]['clid']; //return 7 
echo Client[1]['clid']; //return 9 

我試圖做:

$clientList = explode('|', $clientList); 
foreach($clientList as $client) { 
    $aux[] = explode(' ', $client); 
} 

該代碼將導致:

Array ([0] => Array ([0] => clid=7 [1] => cid=55164 [2] => client_database_id=90507 [3] => client_nickname=Leandro [4] => client_type=0) [1] => Array ([0] => clid=9 [1] => cid=55164 [2] => client_database_id=90507 [3] => client_nickname=Leandro1 [4] => client_type=0) [2] => Array ([0] => clid=10 [1] => cid=55164 [2] => client_database_id=90507 [3] => client_nickname=Leandro2 [4] => client_type=0)) 

,並使其客戶的數組,但現在我需要'='爆炸,但我不能

+0

你說的「我可以指「T「? – 2013-05-07 22:32:58

+0

我沒有專業知識要做:/ – Leandro 2013-05-07 22:33:51

+0

使用preg_match從數組 – vodich 2013-05-07 22:36:26

回答

3

但我cant

:)你可以! :

$result = array(); 
foreach(explode('|', $str) as $record) { 
    $r = array(); 
    foreach(explode(' ', $record) as $field) { 
     $assignment = explode('=', $field); 
     $r[$assignment[0]] = $assignment[1]; 
    } 
    $result []= $r; 
} 

var_dump($result); 

輸出:

array(3) { 
    [0] => 
    array(5) { 
    'clid' => 
    string(1) "7" 
    'cid' => 
    string(5) "55164" 
    'client_database_id' => 
    string(5) "90507" 
    'client_nickname' => 
    string(7) "Leandro" 
    'client_type' => 
    string(1) "0" 
    } 
    [1] => 
    array(5) { 
    'clid' => 
    string(1) "9" 
    'cid' => 
    string(5) "55164" 
    'client_database_id' => 
    string(5) "90507" 
    'client_nickname' => 
    string(8) "Leandro1" 
    'client_type' => 
    string(1) "0" 
    } 

    ... 
+0

中提取結果,這比preg_match +1 – vodich 2013-05-07 22:38:08

+0

yep!要快得多!謝謝 :)。 – hek2mgl 2013-05-07 22:39:16

+0

這是工作!謝謝,我會研究你的代碼。 – Leandro 2013-05-07 22:40:57

0

使用正則表達式來做到這一點...簡單和容易:

$string = "clid=7 cid=55164 client_database_id=90507 client_nickname=Leandro client_type=0|clid=9 cid=55164 client_database_id=90507 client_nickname=Leandro1 client_type=0|clid=10 cid=55164 client_database_id=90507 client_nickname=Leandro2 client_type=0"; 
if(preg_match_all("/(clid=[0-9]*)\s*(cid=[0-9]*)\s*(client_database_id=[0-9]*)\s*(client_nickname=\w+)\s*(client_type=[0-9]*)/i", $string, $matches)) 
{ 
    print_r($matches); 

    //loop through records 
    /*foreach($matches as $match) 
    { 

    }*/ 
} 

沒有測試雖然

+0

我需要學習正則表達式。 – Leandro 2013-05-07 22:45:05

+0

簡單容易'/(clid = [0-9] *)\ s *(cid = [0-9] *)\ s *(client_database_id = [0-9] *)\ s *(client_nickname = \ w + )\ s *(client_type = [0-9] *)/ i' LOL:D – hek2mgl 2013-05-07 22:45:16

+0

@ hek2mgl - 使用正則表達式的更清晰的解決方案。我討厭使用爆炸和194個foreach循環。如果字符串改變了,你所需要的只是優化模式,就是這樣。你不必再次通過循環。我可以更簡化它,如果我想雖然.. – SolidSnake 2013-05-07 22:49:39