我试图做一件事,但我不知道如何:) 我有一个这种格式的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)创建数组
你能帮助我吗?
答案 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`
答案 2 :(得分:0)
使用preg_match_all
和array_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
)
)