创建一个包含字符串

时间:2016-06-13 09:17:54

标签: php html

我试图做一件事,但我不知道如何:)  我有一个这种格式的PHP字符串:

$test = (1 / 2015-11-2 11:11:11, 2 / 2015-07-07 11:11:11, ......)

我需要一个处理该字符串的函数来获取格式:

$testarray = array(
    "id" => "1",
    "date" => "2015-11-2 11:11:11",

    "id" => "2",
    "date" => "2015-07-07 11:11:11",

   .....
    );

我想到了这些步骤:

1)使用

查找$ test字符串中有多少逗号

substr_count($test, ",");

2)取逗号之前的字符串并在此字符串值中找到" /"

3)创建数组

你能帮助我吗?

3 个答案:

答案 0 :(得分:3)

您需要使用的功能是explode。您可以查看文档here

首先,就像你说的那样,你需要使用逗号分隔符将字符串分成“substrings”:

$firstArr = explode(',', $test);

这将返回一个像这样的字符串数组:

$firstArr = [ "1 / 2015-11-2 11:11:11", "2 / 2015-07-07 11:11:11",... ]

之后,您可以在上面包含的每个字符串中再次使用explode

$result = array();   //The resulting array
foreach($firstArr as $str)
{
    $secondArr = explode('/', $str); // specific delimiter '/'
    $result[] = array(
        'id' => trim($secondArr[0]),//trim removes blank spaces if any
        'date' => trim($secondArr[1])
    );
}

$secondArr将是这样的:

$secondArr = ['1', '2015-11-2 11:11:11']

这就是为什么您需要使用$secondArr[0]来获取ID并$secondArr[1]来获取日期

答案 1 :(得分:0)

爆炸是最好的方法,但作为变种,你可以使用正则表达式

(?<=\(|,)\s*(?P<id>\d+)\s+\/\s*(?P<date>[^,\)]+)(?=,|\))

返回此类结果

MATCH 1
id  [1-2]   `1`
date    [5-23]  `2015-11-2 11:11:11`
MATCH 2
id  [25-26] `2`
date    [29-48] `2015-07-07 11:11:11`

demo and some explanation

答案 2 :(得分:0)

使用preg_match_allarray_walk函数的解决方案:

$test = "1 / 2015-11-2 11:11:11, 2 / 2015-07-07 11:11:11";
$result = [];
preg_match_all("/(\d+?) \/ (\d{4}-\d{2}-\d{1,2} \d{2}:\d{2}:\d{2})/", $test, $m, PREG_SET_ORDER);
array_walk($m, function($v, $k) use(&$result){
    $result[] = ['id'=> $v[1], 'date' => $v[2]];
});

print_r($result);

输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [date] => 2015-11-2 11:11:11
        )

    [1] => Array
        (
            [id] => 2
            [date] => 2015-07-07 11:11:11
        )
)