2016-12-22 3 views
1

Возможно, я не могу быть достаточно ясным в заголовке, но вот моя проблема.

У меня есть строка, как этот

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

я делаю explode("#*#", $chain); и теперь у меня есть это:

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 

]

Но я хочу что-то вроде этого

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

Может ли кто-нибудь показать мне, как это сделать?

благодарит

+0

Вы должны использовать стандартизованный формат данных, например, json или сериализовать. Тогда вам не придется вручную разбирать все возможные потенциальные проблемы. – jeroen

ответ

2

1) Простое решение с использованием explode функции:

$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) Альтернативное решение с использованием preg_match_all и array_combine функции:

$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]); 

Оба подхода дадут необходимый результат

+0

Спасибо, что работает! – BarbeBleue

+0

@BarbeBleue, добро пожаловать – RomanPerekhrest

1

Вы можете сделать это с помощью метода explode() РНР, как это:

$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]; 
} 

Конечного результата будет:

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

Надеется, что это помогает!

+0

Благодарим за помощь – BarbeBleue

1

Хотя array_map() является более элегантное решение, это альтернатива:

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

Спасибо за ваш ответ – BarbeBleue

2

Один из способов в Рим.

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

Спасибо за ваш ответ – BarbeBleue

Смежные вопросы