2016-12-22 2 views
1

Je ne suis peut-être pas assez clair dans le titre mais voici mon problème.

J'ai une chaîne comme ce

$chain = "id:20604#*#user_id:32444#*#session_id:0#*#version:142#*#modified:1438610605#*#name:recrutement#*#push:0#*#last_push_execution:0#*#allowempty:1"; 

Je fais un explode("#*#", $chain); et maintenant j'ai ceci:

array:9 [ 
    0 => "id:20604" 
    1 => "user_id:32444" 
    2 => "session_id:0" 
    3 => "version:142" 
    4 => "modified:1438610605" 
    5 => "name:recrutement" 
    6 => "push:0" 
    7 => "last_push_execution:0" 
    8 

]

Mais je veux quelque chose comme ça

array:9 [ 
    "id" => "20604" 
    "user_id" => "32444" 
    "session_id" => "0" 
    "version" => "142" 
    "modified" => "1438610605" 
    "name" => "recrutement" 
    "push"=> "0" 
    "last_push_execution"=> "0" 
    ] 

Quelqu'un peut-il me montrer comment le faire?

grâce

+0

Vous devez utiliser un format de données standardisé comme json ou sérialiser. Ensuite, vous ne devez pas l'analyser manuellement avec tous les problèmes potentiels qui vont présenter. – jeroen

Répondre

2

1) Une solution simple en utilisant explode fonction:

$chain = "id:20604#*#user_id:32444#*#session_id:0#*#version:142#*#modified:1438610605#*#name:recrutement#*#push:0#*#last_push_execution:0#*#allowempty:1"; 
$result = []; 

foreach (explode("#*#", $chain) as $c) { 
    $pair = explode(":", $c); 
    $result[$pair[0]] = $pair[1]; 
} 

2) solution alternative avec preg_match_all et array_combine fonctions:

$chain = "id:20604#*#user_id:32444#*#session_id:0#*#version:142#*#modified:1438610605#*#name:recrutement#*#push:0#*#last_push_execution:0#*#allowempty:1"; 
preg_match_all("/\b(\w+):(\w+)\b/", $chain, $matches); 
$result = array_combine($matches[1], $matches[2]); 

Les deux approches donneront le résultat nécessaire

+0

Merci ça marche! – BarbeBleue

+0

@BarbeBleue, vous êtes les bienvenus – RomanPerekhrest

1

Vous pouvez le faire en utilisant la méthode explode() de PHP comme ceci:

$arr = [ 
    0 => "id:20604", 
    1 => "user_id:32444", 
    2 => "session_id:0", 
    3 => "version:142", 
    4 => "modified:1438610605", 
    5 => "name:recrutement", 
    6 => "push:0", 
    7 => "last_push_execution:0", 
]; 

$final_arr = []; 
foreach ($arr as $key => $val) { 
    $a = explode(':', $val); 
    $final_arr[$a[0]] = $a[1]; 
} 

Le résultat final serait:

$final_arr = array:8 [ 
    "id" => "20604" 
    "user_id" => "32444" 
    "session_id" => "0" 
    "version" => "142" 
    "modified" => "1438610605" 
    "name" => "recrutement" 
    "push" => "0" 
    "last_push_execution" => "0" 
] 

Hope this helps!

+0

Merci pour votre aide – BarbeBleue

1

Alors array_map() est une solution plus élégante, ceci est une alternative:

 
$outArray = array(); 
$tempArray = explode("#*#", $chain); 
foreach ($tempArray as $chainValue) { 
    $split = explode(':',$chainValue); 
    $key = $split[0]; 
    $value = $split[1]; 
    $outArray[$key] = $value; 
} 
+0

Merci pour votre réponse – BarbeBleue

2

Une façon de rome.

$final=array(); 
array_map(
    function($a) use (&$final){ 
     list($k,$v)=explode(':',$a); 
     $final[$k]=$v; 
    }, 
    explode("#*#", $chain) 
); 
var_export($final); 
+0

Merci pour votre réponse – BarbeBleue