2013-05-07 139 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