0

我正在尝试一种简单的方法来获取列表,就像这样

foo: Alpha
bar: Bravo
fooBar: Charlie

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

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

等等

实现这一目标的最干净的方法是什么?

4

4 回答 4

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

于 2013-02-26T10:23:26.427 回答
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"
}
于 2013-02-26T10:26:05.753 回答
0

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

$str    = 'foo: Alpha';
$res    = explode(":",$str);
$array[$res[0]] = $res[0];
于 2013-02-26T10:21:52.437 回答
0

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

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

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

于 2013-02-26T10:41:19.167 回答