php多个字符串到多个变量

时间:2018-04-02 10:07:09

标签: php string variables

我有字符串块:

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

3 个答案:

答案 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

演示:https://3v4l.org/ppv3G

如果您想进行验证或消毒或进行任何其他准备工作,我建议您在致电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";
}

演示:https://3v4l.org/vjYiK

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