2012-07-13 1 views
0

J'ai une variable qui contient du texte avec des valeurs selon un exemple ci-dessous:Comment utiliser Explode dans mon cas?

$data = "5:7|4:1|504:2|1:3|" 

Et je voudrais obtenir des résultats comme celui-ci:

$data[5] = 7; 
$data[4] = 1; 
$data[504] = 2; 
$data[1] = 3; 

J'ai essayé avec exploser:

$data = explode("|", $data); 

//but it makes $data[0]="5:7"; $data[1]="4:1"; and so on. 

Dois-je utiliser de nouveau exploser? Cela a-t-il un sens ou existe-t-il un autre moyen? Je voudrais demander un indice ou de l'aide.

+0

Oui, utiliser 'explode' nouveau. – deceze

+0

Il aura le sens ... vous devez utiliser la fonction 'explode' 2 fois dans ce cas ... – Rikesh

Répondre

4

Il peut y avoir un moyen plus intelligent, mais je le ferais comme ceci:

$data = array(); 
foreach (explode("|", $your_data) as $part) 
{ 
    $pieces = explode(':', $part); 
    // Assumes we have 2 pieces, might want to make sure here... 

    $data[$pieces[0]] = $pieces[1]; 
} 

Aussi, je ne suis pas sûr de ce que ces données représente mais gardez à l'esprit que les clés de tableau se remplaceront les unes les autres, donc 1:1|1:2 résultera en un tableau avec un seul élément (le dernier morceau). Il peut y avoir de bonnes raisons d'adopter une autre approche.

+0

Brillant et fonctionne de la manière que je voulais. – Lucas

1

Bien sûr, explode encore:

$data = "5:7|4:1|504:2|1:3"; 
$array = array(); 
foreach (explode('|', $data) as $pair) { 
    list($id, $val) = explode(':', $pair); 
    $array[$id] = $val; 
} 
1

Oui, vous devez utiliser exploser deux fois, comme ce

$newData = array(); 
$pairs = explode('|',$data); 
foreach($pairs as $pair){ 
    $tmp = explode(':',$pair); 
    $newData[$tmp[0]] = $tmp[1]; 
} 
0

Essayez d'utiliser une expression rationnelle:

$data = preg_split ("\||:", $data); 
0

Une version en ligne:

$data = array_map(function($d) { return (int)explode(":", $d)[1]; }, explode("|", $data));