行和冒号分隔列表到数组PHP

时间:2013-02-26 10:19:29

标签: php associative-array

我正在尝试找出一种简单的方法来获取列表,比如

foo: Alpha
bar: Bravo
fooBar: Charlie

并将其转换为关联数组,以便值为

$array['foo'] //would contain Alpha
$array['bar'] //would contain Bravo

实现这一目标的最简洁方法是什么?

4 个答案:

答案 0 :(得分:2)

如果您的第一个列表已在数组中,您可以手动执行此操作:

$array = [];
$list = ['foo: Alpha', 'bar: Bravo'];

foreach ($list as $element) {
    $parts = explode(': ', $element);
    $array[$parts[0]] = $parts[1];
}

否则,只需使用parse_ini_string将包含数据的字符串解析为关联数组(请注意,此函数需要PHP 5.3或更高版本。)

如果您的数据是字符串,而您没有PHP 5.3,则可以拆分新行以获取数组:$list = explode("\n", $string);

答案 1 :(得分:1)

这样的东西?:

$string = "foo: Alpha
bar: Bravo
fooBar: Charlie";

$array = array();
$lines = explode("\n", $string);

foreach ($lines as $line) {
    list($key, $value) = explode(": ", $line);
    $array[$key] = $value;
}

var_dump($array);


结果:

array(3) {
  ["foo"]=>
  string(6) "Alpha
"
  ["bar"]=>
  string(6) "Bravo
"
  ["fooBar"]=>
  string(7) "Charlie"
}

答案 2 :(得分:0)

试试这个:     $ array = array();

$str    = 'foo: Alpha';
$res    = explode(":",$str);
$array[$res[0]] = $res[0];

答案 3 :(得分:0)

也许这有点过分,但如果您的文件格式可能会扩展,那么值得研究YAML,您的示例恰好是有效的YAML标记。例如,您可以使用Symfony YAML component

use Symfony\Component\Yaml\Yaml;
$array = Yaml::parse('/path/to/file.yml');

它适用于您当前的格式,如果您决定添加嵌套数组或其他非平凡数据,只需使用YAML语法,这非常直观。以下是对格式的介绍: http://symfony.com/doc/2.0/components/yaml/yaml_format.html