PHP将逗号数组分隔为变量/值

PHP将逗号数组分隔为变量/值,php,Php,表字段中有一个字符串,如下所示: part1=1,part2=S,part3=Y,part4=200000 要从表中调用它,请执行以下操作: while($row = mysqli_fetch_array($result)) { $row['mystring']; } 我的问题是我需要将这些部分分成变量,例如: $fruit = "apple"; $$fruit = "this is the apple variable"; echo $apple; 由此: pa

表字段中有一个字符串,如下所示:

part1=1,part2=S,part3=Y,part4=200000
要从表中调用它,请执行以下操作:

 while($row = mysqli_fetch_array($result)) {


        $row['mystring'];


}
我的问题是我需要将这些部分分成变量,例如:

$fruit = "apple";
$$fruit = "this is the apple variable";
echo $apple;
由此:

part1=1,part2=S,part3=Y,someothername=200000
为此:

$part1 = '1';
$part2 = 'S';
$part3 = 'Y';
$someothername = '200000';
如何执行此操作?

第一个拆分字符串:

$s = "part1=1,part2=S,part3=Y,part4=200000";
$a = explode(",",$s);
然后为字符串的每个部分(“part1=1”…)创建一个数组并分解为变量:

foreach($a as $k=>$v)
{
 $tmp = explode("=",$v);
 $tmp = array($tmp[0]=>$tmp[1]);
 extract($tmp);
}
echo $part1;

双击
explode
字符串以获取所需字段:

$string ="part1=1,part2=S,part3=Y,someothername=200000";

foreach (explode(',', $string) as $parts) {
  $part = explode('=', $parts);
  $array[$part[0]] = $part[1];
}

var_dump($array);
输出:

 array(4) {
  ["part1"]=>
  string(1) "1"
  ["part2"]=>
  string(1) "S"
  ["part3"]=>
  string(1) "Y"
  ["someothername"]=>
  string(6) "200000"
}
我不建议使用变量来获得以下输出:

$part1 = ...
$part2 = ...
在这里,使用数组可能是最简单、最安全的方法。正如我在评论中所建议的,它避免了与变量名的潜在冲突。

这样使用

parse_str( str_replace(",", "&", "part1=1,part2=S,part3=Y,someothername=200000") );
与以下名称一起使用:

$part1 // return 1
$part2 // return S
$part3 // return Y

如您所愿,请参阅

您可以使用称为“变量”的东西。如果使用双美元符号而不是单美元符号,则可以将变量的内容声明为变量。例如:

$fruit = "apple";
$$fruit = "this is the apple variable";
echo $apple;
它将输出以下内容:

这是苹果变量

在定义数组中的变量时,您必须更加小心,因为您必须将原始变量包含在花括号中。(例如:
${$fruit[0]}

因此,你的问题的答案是:

$parts = "part1=1,part2=S,part3=Y,someothername=200000";
$parts_array = explode(",", $parts);
foreach ($parts_array as $value) {
    $temp = explode("=", $value);
    ${$temp[0]} = $temp[1];
}
echo "$part1, $part2, $part3, $someothername";

PHPFiddle链接:

如果使用PHP5.3+可以使用数组映射

<?php

$string = 'part1=1,part2=S,part3=Y,part4=200000';

array_map(function($a){
    $tmp = explode('=', $a, 2);
    global ${$tmp[0]}; //make vars available outside of this function scope
    ${$tmp[0]} = $tmp[1]; 
}, explode(',', $string));

//Variables available outside of array_map scope
echo $part1 . '<br>';
echo $part2 . '<br>';
echo $part3 . '<br>';
echo $part4 . '<br>';

?>


您可以在最后使用extract()来获取变量,但我也坚持使用array@DavidJones是的,我应该说明,在这种情况下,最好避免直接命名变量,以避免可能与同名的现有变量发生冲突。是的,我同意您关于保留数组的意见,但OP需要变量:)