php - 将字符串转换为多维数组以在php中计算日期

标签 php arrays date multidimensional-array

我有一个如下的字符串

Mon[3,9] Tue[3,9] Wed[5,9] Thu[5,11] Fri[5,11] Sat[5,11] Sun[4,10]

我想将此字符串分解为多维数组,并将像 Mon,Tue,Wed 这样的日子存储为键,将方括号内的值存储为每天的值,如下所示,并将每天作为较小的数组进行访问

Array
(
    [Mon] => [3,9]
    [Tue] => [3,9]
    [Wed] => [5,9]
    [Thu] => [5,11]
    [Fri] => [5,11]
    [Sat] => [5,11]
    [Sun] => [4,10]
)

通过下面的代码,我能够实现它,但诸如 [3,9] 或 [5,11] 之类的值被视为字符串

    $atd = $utd = "";
    $dod = "20-12-2020";
    $daysArray = "Mon[3,9] Tue[3,9] Wed[5,9] Thu[5,11] Fri[5,11] Sat[5,11] Sun[4,10]";
    $days = array('Mon','Tue','Wed','Thu','Fri','Sat','Sun');
    preg_match_all("/\[[^\]]*\]/", $daysArray, $matches);
    $dayNum = $matches[0];
    $daysArray = array_combine($days , $dayNum);
    print_r($daysArray);
        
        $valArray = array();
        
        foreach($daysArray as $day=>$val){
            if($day == "Mon" || $day == "Tue"){
              $atd = date("d-m-Y", strtotime("+".$val[0]." days", $dod));
              $utd = date("d-m-Y", strtotime("+".$val[1]." days", $dod));
           }else if($day == "Sun"){
              $atd = date("d-m-Y", strtotime("+".$val[0]." days", $dod));
              $utd = date("d-m-Y", strtotime("+".$val[1]." days", $dod));
           }else if($day == "Wed"){
              $atd = date("d-m-Y", strtotime("+".$val[0]." days", $dod));
              $utd = date("d-m-Y", strtotime("+".$val[1]." days", $dod));
           }else{
              $atd = date("d-m-Y", strtotime("+".$val[0]." 5 days", $dod));
              $utd = date("d-m-Y", strtotime("+".$val[1]." days", $dod));
             }
            }
        } 

当我打印 $valArray 时,它是一个如下所示的数组,这是非常糟糕的。

array(
   [0]=>[
   [1]=>4
   [2]=>,
   [3]=>1
   [4]=>0
   [5]=>]
);

请帮忙

最佳答案

我认为这就是您所要求的结果。

$str = 'Mon[3,9] Tue[3,9] Wed[5,9] Thu[5,11] Fri[5,11] Sat[5,11] Sun[4,10]';

$result = [];

$bits = explode(' ', $str); // explode on space between day names
foreach ( $bits as $bit) {
    $b = explode('[', $bit);    // $bit = Mon[3,9] 
    $b[1] = rtrim($b[1], ']');  // $b0 = Mon, B1 = 3,9] so trim off the last ]
    $result[$b[0]] = explode(',', $b[1]); // explode on , to get inner array
}
print_r($result);

结果

Array
(
    [Mon] => Array
        (
            [0] => 3
            [1] => 9
        )
    [Tue] => Array
        (
            [0] => 3
            [1] => 9
        )
    [Wed] => Array
        (
            [0] => 5
            [1] => 9
        )
    [Thu] => Array
        (
            [0] => 5
            [1] => 11
        )
    [Fri] => Array
        (
            [0] => 5
            [1] => 11
        )
    [Sat] => Array
        (
            [0] => 5
            [1] => 11
        )
    [Sun] => Array
        (
            [0] => 4
            [1] => 10
        )
)

关于php - 将字符串转换为多维数组以在php中计算日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65564886/

相关文章:

arrays - Bash:嵌套for循环+中间循环包含两个数组?

php - 如何在php中从数组列表生成数组

c++ - 将数组分配给数组

sql - Oracle SQL 按季度计算的美元总和

带有查询参数的 PHP 重定向

javascript - Jquery Ajax 无法获取当前聚焦的输入元素

windows - 添加/删除程序在哪里提取 "Installed On"列的数据?

swift - 我如何从 NSDate 中找到一周的开始?

php - 移动网站无法从 chrome safari 加载到 ipad

php - 在相同的符号中删除和创建相同的触发器