我是新的PHP问题,我正在尝试使用以下数据字符串创建数组。我还没有得到任何工作。有没有人有任何建议?
我的字符串:
Acct_Status=active,signup_date=2010-12-27,acct_type=GOLD,profile_range=31-35
我想动态创建一个名为“My_Data”的数组,并且id显示类似于我的内容,请记住我的数组可以在不同的时间返回更多或更少的数据。
My_Data
(
[Acct_Status] => active
[signup_date] => 2010-12-27
[acct_type] => GOLD
[profile_range] => 31-35
)
第一次使用PHP时,是否有人会对我需要做什么或有一个简单的解决方案有任何建议?我已经尝试过使用一个爆炸,为每个循环做一个,但要么我在我需要的方式,或我错过了一些东西。我正在得到更多与以下结果相符的内容。
Array ( [0] => Acct_Status=active [1] => signup_date=2010-12-27 [2] => acct_type=GOLD [3] => profile_range=31-35} )
答案 0 :(得分:4)
您需要explode()
,
上的字符串,然后再foreach
循环,再explode()
=
,并将每个字符串分配给输出阵列。
$string = "Acct_Status=active,signup_date=2010-12-27,acct_type=GOLD,profile_range=31-35";
// Array to hold the final product
$output = array();
// Split the key/value pairs on the commas
$outer = explode(",", $string);
// Loop over them
foreach ($outer as $inner) {
// And split each of the key/value on the =
// I'm partial to doing multi-assignment with list() in situations like this
// but you could also assign this to an array and access as $arr[0], $arr[1]
// for the key/value respectively.
list($key, $value) = explode("=", $inner);
// Then assign it to the $output by $key
$output[$key] = $value;
}
var_dump($output);
array(4) {
["Acct_Status"]=>
string(6) "active"
["signup_date"]=>
string(10) "2010-12-27"
["acct_type"]=>
string(4) "GOLD"
["profile_range"]=>
string(5) "31-35"
}
答案 1 :(得分:3)
使用parse_str
将,
转换为&
后,懒惰选项将使用strtr
:
$str = strtr($str, ",", "&");
parse_str($str, $array);
然而,我会在这里完全使用正则表达式来断言结构:
preg_match_all("/(\w+)=([\w-]+)/", $str, $matches);
$array = array_combine($matches[1], $matches[2]);
这将跳过任何不是由字母,数字或超量组成的属性。 (问题在于,如果这对你的输入当然是一个可行的约束。)
答案 2 :(得分:2)
$myString = 'Acct_Status=active,signup_date=2010-12-27,acct_type=GOLD,profile_range=31-35';
parse_str(str_replace(',', '&', $myString), $myArray);
var_dump($myArray);