PHP:从带冒号的字符串创建key =>值对

时间:2018-02-05 22:45:25

标签: php arrays

我有以下问题:我发出cURL请求并得到这样的响应(没有json):

100
123456
Foo: Bar
Foo1: Bar1
Foo2: Bar2

为了能够处理这些数据,我创建了一个数组:

$result = preg_split("/\\r\\n|\\r|\\n/", $result);

现在我有一个包含这些项目的数组:

array(
    "100",
    "123456",
    "Foo: Bar",
    "Foo1: Bar1",
    "Foo2: Bar2"
)

我的问题是:使用key =>创建数组有一个很好的方法吗?值对,所以冒号前面的字符串是键,冒号后的字符串是值?前两个项目永远不会有冒号,所以我需要分别为它们添加一个键,并且冒号之前的字符串永远不会相同,因此不可能多次存在相同的键。此外,还有一个或没有冒号。

提前致谢!

1 个答案:

答案 0 :(得分:2)

此代码假定没有密钥是重复的。如果有,后者会覆盖之前的。没有冒号的条目将使用键0,1,2等。

$data = array(
    "100",
    "123456",
    "Foo: Bar",
    "Foo1: Bar1",
    "Foo2: Bar2"
);

$o = array_reduce($data, function($carry, $m){
    //echo $m . "\n";
    $e = explode(':', $m, 2);

    if ( count($e) == 1 ) {
        $carry[] = trim($e[0]);
    } else {
        $carry[$e[0]] = trim($e[1]);
    }
    return $carry;
}, []);

print_r($o);

输出:

Array
(
    [0] => 100
    [1] => 123456
    [Foo] =>  Bar
    [Foo1] =>  Bar1
    [Foo2] =>  Bar2
)