php - 将组合字符串拆分为数组

标签 php javascript jquery arrays codeigniter

我在这里问了一个关于合并商店营业时间相似的日子的问题

Combine days where opening hours are similar

现在我需要一些帮助来做相反的事情:获取包含组合日期的字符串并将它们拆分为单独的日期,然后将它们按一天的顺序存储在一个数组中(首先是星期一,最后是星期日)。

例如,这里有一组需要转换的字符串(完全相同的格式):

Mon-Fri 11 am - 7:30 pm
Sat 11 am - 6 pm

两个字符串需要组合在一起并转换成这个数组:

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。

更新:

我现在必须拆分这串包含逗号的文本!

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-WedSun 分开,从

Tue-Wed, Sun 7:30 pm - 1 am

Tue-Wed 7:30 pm - 1 am
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] => 
[
] => 
)

最佳答案

您还可以使用类似于以下代码的 Controller 操作:

<?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);

然后使用 $.getJSON() 获取数据。

关于php - 将组合字符串拆分为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6513791/

相关文章:

javascript - Jquery - 每个相同类 li 值的总和

javascript - 实现搜索栏以过滤列表项

Javascript 更新导致悲伤

javascript - Angular 和 Laravel - 从 mysql 获取数据

php - PHP Mysqli INSERT错误,意外””

javascript - 无法让 addClass 和 removeClass 正常工作,创建 "15 game"

javascript - 只向一个事件注册一次函数?

php - 关闭 magento 购物车中的产品 url

php - Greasemonkey AJAX 请求不发送数据?

javascript - Mysql PHP 到 JavaScript 数组