【问题标题】:explode two-item-list in array as key=>value将数组中的两项列表分解为键 => 值
【发布时间】:2011-05-19 04:03:39
【问题描述】:

我想像这样分解一个多行字符串

color:red
material:metal

到这样的数组

$array['color']=red
$array['material']=metal

有什么想法吗?

【问题讨论】:

    标签: php arrays explode


    【解决方案1】:

    使用explode(),您可以使用正则表达式,但它很简单,没有开销。

    $data = array();
    foreach (explode("\n", $dataString) as $cLine) {
        list ($cKey, $cValue) = explode(':', $cLine, 2);
        $data[$cKey] = $cValue;
    }
    

    如 cmets 中所述,如果数据来自 Windows/DOS 环境,它很可能有 CRLF 换行符,在 foreach() 之前添加以下行将解决该问题。

    $dataString = str_replace("\r", "", $dataString); // remove possible \r characters
    

    使用preg_match_all()array_combine() 的正则表达式的替代方案非常令人愉快:

    $matches = array();
    preg_match_all('/^(.+?):(.+)$/m', $dataString, $matches);
    $data = array_combine($matches[1], $matches[2]);
    

    【讨论】:

    • 别忘了至少从$cValue 中去掉可能的"\r"
    • @Jon 非常正确,修改了那个改动和一个非常令人愉快的正则表达式版本。
    【解决方案2】:

    试试这个

    $value = '1|a,2|b,3|c,4|d';
    $temp = explode (',',$value);
    foreach ($temp as $pair) 
    {
        list ($k,$v) = explode ('|',$pair);
        $pairs[$k] = $v;
    }
    
    print_r($pairs);
    

    【讨论】:

      【解决方案3】:

      在换行时首先爆炸。普罗利\n

      然后在 : 上分解每个结果数组的项,并为该键/值设置一个新数组。

      【讨论】:

        猜你喜欢
        • 2021-12-01
        • 2020-06-26
        • 2018-09-06
        • 1970-01-01
        • 1970-01-01
        • 2016-11-02
        • 2015-09-04
        • 2020-01-20
        • 2019-04-06
        相关资源
        最近更新 更多