У меня ниже строки образца
device_name="Text Data" d_id=7454579598 status="Active" Key=947-4378-43248274
Я хочу преобразовать эту строку в массив
Ожидаемый результат
device_name="Text Data"
d_id=7454579598
status="Active"
Key=947-4378-43248274
Я попробовал это, используя функцию explode для этого, но он дает ниже выходного
$data='device_name="Text Data" d_id=7454579598 status="Active" Key=947-4378-43248274';
$arr= explode("",$data);
генерируемый результат
device_name="Text
Data"
d_id=7454579598
status="Active"
Key=947-4378-43248274
попробуйте этот код
$str = 'device_name="Text Data" d_id=7454579598 status="Active" Key=947-4378-43248274';
$pattern = '/(\\w+)\s*=\\s*("[^"]*"|\'[^\']*\'|[^"\'\\s>]*)/';
preg_match_all($pattern, $str, $matches, PREG_SET_ORDER);
$attrs = array();
foreach ($matches as $match) {
if (($match[2][0] == '"' || $match[2][0] == "'") && $match[2][0] == $match[2][strlen($match[2])-1]) {
$match[2] = substr($match[2], 1, -1);
}
$name = strtolower($match[1]);
$value = html_entity_decode($match[2]);
$attrs[$name] = $value;
}
print_r($attrs);
вывод
Array ( [device_name] => Text Data [d_id] => 7454579598 [status] => Active [key] => 947-4378-43248274 )
Сначала конвертируйте в JSON. JSON Docs
$str = 'device_name="Text Data" d_id=7454579598 status="Active" Key=947-4378-43248274';
$json = '{'.str_replace('=',':',$str).'}';
$json = '{'.str_replace(' ',',',$str).'}';
получить как JSON. как:
{device_name:"Text Data",d_id:7454579598,status:"Active",Key:947-4378-43248274}
и преобразовать в массив
$array = json_decode($json, true);
и выход
array(4) {
["device_name"] => "Text Data"
["d_id"] => 7454579598
["status"] => "Active"
["Key"] => "947-4378-43248274"
}
Рассмотрим этот небольшой и тривиальный пример, используя регулярное выражение:
<?php
$subject = 'device_name="Text Data" d_id=7454579598 status="Active" Key=947-4378-43248274';
$pattern = '/^device_name="(.*)" d_id=(\d+) status="(.*)" Key=([0-9-]*)$/';
preg_match($pattern, $subject, $tokens);
var_dump($tokens);
Это создает этот результат:
array(5) {
[0] =>
string(77) "device_name="Text Data" d_id=7454579598 status="Active" Key=947-4378-43248274"
[1] =>
string(9) "Text Data"
[2] =>
string(10) "7454579598"
[3] =>
string(6) "Active"
[4] =>
string(17) "947-4378-43248274"
}
Отсюда вы, вероятно, можете продолжать :-)