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