创建动态PHP数组

时间:2012-11-08 00:40:06

标签: php arrays

我是新的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} ) 

3 个答案:

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