php多个字符串到多个变量

I've the string block:

Size : Size 13 - 950-975 <br />Easygrip_Locking_System : No <br />Veranda_pole : No <br />Safelock_tie_down : No <br />Storm_Pole : No <br />Tall_Annexe : Yes <br />Inner_tent : Yes <br />

What I need is to create variables from the above block like :

$Size = "Size 13 - 950-975";
$Easygrip_Locking_System = "No";
$Veranda_pole = "No";
...
$Inner_tent = "Yes";

All of this are product options and depending on a product type possible to be more ore less and different.

I've already tried with preg_split than to put in array and eval() but not get what I need.

$keywords = preg_split('/[\,]+/', '$Size= "Size 13 - 950-975";,$Easygrip_Locking_System= "No";');
print_r($keywords);

You can achieve this by exploding your string in to array then separate variable and value by :

$str = "Size : Size 13 - 950-975 <br />Easygrip_Locking_System : No <br />Veranda_pole : No <br />Safelock_tie_down : No <br />Storm_Pole : No <br />Tall_Annexe : Yes <br />Inner_tent : Yes <br />";
$arr =explode("<br />",$str);
var_dump($arr);
foreach ($arr as $key => $value) {
  $tmp = explode(":", $value);
  if(count($tmp) > 1)
    ${trim($tmp[0])} = trim($tmp[1]);
}

//Here you can get your variables like:

echo $Size;

Prepare the string with appropriately placed = and &, then parse, then extract.

$string="Size : Size 13 - 950-975 <br />Easygrip_Locking_System : No <br />Veranda_pole : No <br />Safelock_tie_down : No <br />Storm_Pole : No <br />Tall_Annexe : Yes <br />Inner_tent : Yes <br />";
$string=str_replace([' : ', ' <br />'], ['=', '&'], $string);
parse_str($string, $out);
extract($out);

echo "Size = $Size
";
echo "Easygrip_Locking_System = $Easygrip_Locking_System
";
echo "Veranda_pole = $Veranda_pole
";
echo "Safelock_tie_down = $Safelock_tie_down
";
echo "Storm_Pole = $Storm_Pole
";
echo "Tall_Annexe = $Tall_Annexe
";
echo "Inner_tent = $Inner_tent
";

Output:

Size = Size 13 - 950-975
Easygrip_Locking_System = No
Veranda_pole = No
Safelock_tie_down = No
Storm_Pole = No
Tall_Annexe = Yes
Inner_tent = Yes

Demo: https://3v4l.org/ppv3G

If you want to perform validation or sanitize or make any other preparations, I recommend doing so before calling extract.

Alternatively, if you want to have greater control of the key and value substrings via a regex pattern, you can use pre_match_all().

if (preg_match_all ('~([a-z_]+) : (.+?) <br />~i', $string, $out, PREG_PATTERN_ORDER)) {
    extract(array_combine($out[1], $out[2]));

    echo "Size = $Size
";
    echo "Easygrip_Locking_System = $Easygrip_Locking_System
";
    echo "Veranda_pole = $Veranda_pole
";
    echo "Safelock_tie_down = $Safelock_tie_down
";
    echo "Storm_Pole = $Storm_Pole
";
    echo "Tall_Annexe = $Tall_Annexe
";
    echo "Inner_tent = $Inner_tent
";
}

Demo: https://3v4l.org/vjYiK

$str = 'Size : Size 13 - 950-975 <br />Easygrip_Locking_System : No <br />Veranda_pole : No <br />Safelock_tie_down : No <br />Storm_Pole : No <br />Tall_Annexe : Yes <br />Inner_tent : Yes <br />';

$result = array();

foreach (explode('<br />', trim($str, '<br />')) as $key => $value) {
    $key = trim(strstr($value, ':', true));
    $value = trim(substr(strstr($value, ':'), 1));
    $result[$key] = $value;
}

// May be unsafe    
extract($result);