我有字符串块:
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 />
我需要的是从上面的块创建变量,如:
$Size = "Size 13 - 950-975";
$Easygrip_Locking_System = "No";
$Veranda_pole = "No";
...
$Inner_tent = "Yes";
所有这些都是产品选择,并且取决于产品类型可能更少,更不同。
我已经尝试过使用preg_split而不是放入数组和eval()
但是没有得到我需要的东西。
$keywords = preg_split('/[\,]+/', '$Size= "Size 13 - 950-975";,$Easygrip_Locking_System= "No";');
print_r($keywords);
答案 0 :(得分:3)
您可以通过将字符串扩展到数组然后将变量和值分隔为:
$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;
答案 1 :(得分:2)
使用适当放置的=
和&
准备字符串,然后解析,然后解压缩。
$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\n";
echo "Easygrip_Locking_System = $Easygrip_Locking_System\n";
echo "Veranda_pole = $Veranda_pole\n";
echo "Safelock_tie_down = $Safelock_tie_down\n";
echo "Storm_Pole = $Storm_Pole\n";
echo "Tall_Annexe = $Tall_Annexe\n";
echo "Inner_tent = $Inner_tent\n";
输出:
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
如果您想进行验证或消毒或进行任何其他准备工作,我建议您在致电extract
之前这样做。
或者,如果您希望通过正则表达式模式更好地控制键和值子串,可以使用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\n";
echo "Easygrip_Locking_System = $Easygrip_Locking_System\n";
echo "Veranda_pole = $Veranda_pole\n";
echo "Safelock_tie_down = $Safelock_tie_down\n";
echo "Storm_Pole = $Storm_Pole\n";
echo "Tall_Annexe = $Tall_Annexe\n";
echo "Inner_tent = $Inner_tent\n";
}
答案 2 :(得分:0)
$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);