Php 将组合字符串拆分为数组
我在这里问了一个关于商店营业时间相似的日子的问题 现在,我需要一些帮助来做相反的事情:获取包含合并日期的字符串并将其拆分为单独的日期,然后将它们按日期顺序存储在数组中(Mon first,Sun last) 例如,以下是一组需要转换的字符串(格式完全相同): 这两个字符串需要组合在一起并转换为此数组:Php 将组合字符串拆分为数组,php,javascript,jquery,arrays,codeigniter,Php,Javascript,Jquery,Arrays,Codeigniter,我在这里问了一个关于商店营业时间相似的日子的问题 现在,我需要一些帮助来做相反的事情:获取包含合并日期的字符串并将其拆分为单独的日期,然后将它们按日期顺序存储在数组中(Mon first,Sun last) 例如,以下是一组需要转换的字符串(格式完全相同): 这两个字符串需要组合在一起并转换为此数组: array[0] = "11am - 7:30pm" array[1] = "11am - 7:30pm" array[2] = "11am - 7:30pm" array[3] = "11am
array[0] = "11am - 7:30pm"
array[1] = "11am - 7:30pm"
array[2] = "11am - 7:30pm"
array[3] = "11am - 7:30pm"
array[4] = "11am - 7:30pm"
array[5] = "11am - 6pm"
array[6] = "" // Blank value if the day Sunday is not in the set of strings that needs conversion
// ideally it should be an associative array, ie. array['mon'] = "11am - 7:30pm"
顺便说一句,我正在使用Codeigniter PHP框架和jQuery
更新:
Array
(
[Mon] => 9 pm - 1 am
[Tue] =>
[Wed] =>
[Thu] => 7:30 pm - 2 am
[Fri] => 7:30 pm - 2 am
[Sat] => 7:30 pm - 2 am
[Sun] =>
)
我现在必须拆分这个包含逗号的文本字符串
Mon 9 pm - 1 am
Tue-Wed, Sun 7:30 pm - 1 am
Thu-Sat 7:30 pm - 2 am
结果数组:
Array
(
[Mon] => 9 pm - 1 am
[Tue] =>
[Wed] =>
[Thu] => 7:30 pm - 2 am
[Fri] => 7:30 pm - 2 am
[Sat] => 7:30 pm - 2 am
[Sun] =>
)
看来我得把星期二和星期三从太阳分开
Tue-Wed, Sun 7:30 pm - 1 am
到
@Khattam:这段时间:
Mon 9 pm - 1 am
Tue-Wed, Sun 7:30 pm - 1 am
Thu-Sat 7:30 pm - 2 am
给出:
Array
(
[Mon] => 9 pm - 1 am
[Tue] => 7:30 pm - 1 am
[Wed] => 7:30 pm - 1 am
[Thu] => 7:30 pm - 2 am
[Fri] => 7:30 pm - 2 am
[Sat] => 7:30 pm - 2 am
[Sun] =>
[
] =>
)
使用
RegExp
解析天数,然后对集合中的每一天使用相同的值迭代天数
var hrsCondensed = ["Mon-Fri 11 am - 7:30 pm", "Sat 11 am - 6 pm"];
var hrsExpanded = ["","","","","","",""];
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
$.each(hrsCondensed, function()
{
if (/([a-z]{3})-([a-z]{3}) (.+)/i.test(this))
{
var start = RegExp.$1;
var end = RegExp.$2;
var hrs = RegExp.$3;
var i = $.inArray(start, days);
hrsExpanded[i] = hrs;
while(days[i] != end)
{
if (++i > 6) i = 0;
hrsExpanded[i] = hrs;
}
}
else
{
var day = this.substr(0, 3);
var hrs = this.substr(4);
var i = $.inArray(day, days);
hrsExpanded[i] = hrs;
}
});
实时工作示例:使用正则表达式强> 示例(快速和肮脏):
资料来源:,这应该让您开始学习
var dates = ['Mon-Fri 11 am - 7:30 pm','Sat 11 am - 6 pm'];//for testing
var regex = '(\\w{3})-?(\\w{3})?\\s+(.*)';
var week = {'Mon':0, 'Tue':1, 'Wed':2, 'Thu':3, 'Fri':4, 'Sat':5, 'Sun':6};
function foo(){
var datum = [];
re = new RegExp(regex);
for(i in dates){
match = re.exec(dates[i]);
if(match != null){
from = week[match[1]];
to = match[2]? week[match[2]]: from;
tim = match[3];
for(i=from; i<=to; ++i){
datum[i] = tim;
}
}
}
alert(datum);
}
var dates=[“周一至周五上午11点至下午7:30”,“周六上午11点至下午6点]//用于测试
var regex='(\\w{3})-?(\\w{3})\\s+(.*);
变量week={'Mon':0,'Tue':1,'Wed':2,'Thu':3,'Fri':4,'Sat':5,'Sun':6};
函数foo(){
var数据=[];
re=新的RegExp(regex);
(i)日期{
匹配=重新执行(日期[i]);
如果(匹配!=null){
from=周[匹配[1]];
to=匹配[2]?周[匹配[2]:开始;
tim=匹配[3];
对于(i=from;i,您还可以使用控制器操作,其代码类似于以下代码:
<?php
$days = array(
'Mon',
'Tue',
'Wed',
'Thu',
'Fri',
'Sat',
'Sun'
);
$combined = "Tue-Wed, Sun 7:30 pm - 1 am";
$combined = explode("\n",$combined);
foreach($combined as &$c){
$commaPosition = strpos($c,', ');
if($commaPosition!==false){
array_push($combined,substr($c,$commaPosition+2));
$spacePosition = strpos($c,' ',$commaPosition+2);
$c = substr($c,0,$commaPosition).substr($c,$spacePosition);
}
}
$splitArray = array();
foreach($days as $d){
$splitArray[$d]='';
}
foreach($combined as $c){
$daysRange = explode(' ',$c);
$daysRange = $daysRange[0];
if(strpos($daysRange,'-')===false){
$splitArray[$daysRange] = substr($c,strlen($daysRange)+1);
}
else{
$temp = explode('-',$daysRange);
$dayStart = $temp[0];
$dayStartIndex = array_search($dayStart,$days);
$dayEnd = $temp[1];
$dayEndIndex = array_search($dayEnd,$days);
for($i=$dayStartIndex;$i<=$dayEndIndex;$i++){
$splitArray[$days[$i]] = substr($c,strlen($daysRange)+1);
}
}
}
echo json_encode($splitArray);
你有一些代码吗?你试过什么吗?我有点困了,有大量的if/else语句考虑案例周一周二、周一周三、周一周四、周一周五、周一周六、周一周日、周二周三、周二周四…
等思考用-
拆分字符串然后解决问题。太好了!现在我有了一个strING如上面更新的问题所示,代码现在需要考虑逗号……我想TimeWe必须在<代码> $aysReals和“爆炸<代码>”、“<代码> >定界符和另外的<代码> ELSIF < /COD>条件>代码> ELSIF(STRPOS($DaysRange','-')= TRUE & & STRPOS($aysAsLead,'','))=真)
,然后我被卡住了:(@Nyxynyx刚刚添加了一个循环,将带有逗号的格式更改为旧格式。这应该可以工作。
Mon-Fri 11 am - 7:30 pm ==> 11 am,7:30 pm
Sat 11 am - 6 pm ==> 11 am,6 pm
var dates = ['Mon-Fri 11 am - 7:30 pm','Sat 11 am - 6 pm'];//for testing
var regex = '(\\w{3})-?(\\w{3})?\\s+(.*)';
var week = {'Mon':0, 'Tue':1, 'Wed':2, 'Thu':3, 'Fri':4, 'Sat':5, 'Sun':6};
function foo(){
var datum = [];
re = new RegExp(regex);
for(i in dates){
match = re.exec(dates[i]);
if(match != null){
from = week[match[1]];
to = match[2]? week[match[2]]: from;
tim = match[3];
for(i=from; i<=to; ++i){
datum[i] = tim;
}
}
}
alert(datum);
}
<?php
$days = array(
'Mon',
'Tue',
'Wed',
'Thu',
'Fri',
'Sat',
'Sun'
);
$combined = "Tue-Wed, Sun 7:30 pm - 1 am";
$combined = explode("\n",$combined);
foreach($combined as &$c){
$commaPosition = strpos($c,', ');
if($commaPosition!==false){
array_push($combined,substr($c,$commaPosition+2));
$spacePosition = strpos($c,' ',$commaPosition+2);
$c = substr($c,0,$commaPosition).substr($c,$spacePosition);
}
}
$splitArray = array();
foreach($days as $d){
$splitArray[$d]='';
}
foreach($combined as $c){
$daysRange = explode(' ',$c);
$daysRange = $daysRange[0];
if(strpos($daysRange,'-')===false){
$splitArray[$daysRange] = substr($c,strlen($daysRange)+1);
}
else{
$temp = explode('-',$daysRange);
$dayStart = $temp[0];
$dayStartIndex = array_search($dayStart,$days);
$dayEnd = $temp[1];
$dayEndIndex = array_search($dayEnd,$days);
for($i=$dayStartIndex;$i<=$dayEndIndex;$i++){
$splitArray[$days[$i]] = substr($c,strlen($daysRange)+1);
}
}
}
echo json_encode($splitArray);