如何使用嵌套数组遍历数组以插入数据库 (php)

How to iterate through array with nested arrays to insert into DB (php)

我正在尝试弄清楚如何从 AirBnB 获取 icalendar 文件,遍历这些值,然后将它们插入我们的 MySQL 数据库中。

我能够使用 PHP Class iCalEasyReader 解析带有结果的 ical 文件,结果如下:

Array
    (
     [PRODID;X-RICAL-TZSOURCE=TZINFO] => -//Airbnb Inc//Hosting Calendar 0.8.8//EN
     [CALSCALE] => GREGORIAN
     [VERSION] => 2.0
     [VEVENT] => Array
    (
        [0] => Array
            (
                [DTEND] => Array
                    (
                        [value] => 20210611
                        [type] => DATE
                    )

                [DTSTART] => Array
                    (
                        [value] => 20210610
                        [type] => DATE
                    )

                [UID] => 6fec1092d3fa-4126b88bbf4a059ac40146791e2f07ff@airbnb.com
                [SUMMARY] => Airbnb (Not available)
            )

        [1] => Array
            (
                [DTEND] => Array
                    (
                        [value] => 20210711
                        [type] => DATE
                    )

                [DTSTART] => Array
                    (
                        [value] => 20210703
                        [type] => DATE
                    )

                [UID] => 6fec1092d3fa-6e00333d20e7921f3dc74dff5bca3a9f@airbnb.com
                [SUMMARY] => Airbnb (Not available)
            )

        [2] => Array
            (
                [DTEND] => Array
                    (
                        [value] => 20220612
                        [type] => DATE
                    )

                [DTSTART] => Array
                    (
                        [value] => 20220307
                        [type] => DATE
                    )

                [UID] => 6fec1092d3fa-c0b7fcb782d4c41ea6dcbc5af78bfb61@airbnb.com
                [SUMMARY] => Airbnb (Not available)
            )

    )

 )

解析文件所需的唯一部分是开始日期和结束日期 [DTSTART][DTEND](嵌套数组元素)以及 [UID][SUMMARY] 值都在 [VEVENT] 数组中。

我的目标是迭代每个数组并将结果插入到 MySQL 数据库中。我可以毫无问题地插入并且解析了大部分数组,但是从 [DTSTART][DTEND] 获取 [VALUE] 超出了我目前的理解。我已经查看了关于 foreach 迭代的 PHP Looping post,但看不到如何获取日期的嵌套数组中的值。

到目前为止我的代码如下:

<?php
   foreach ($lines[VEVENT] as $events) {
      foreach ($events as $val => $k) {
        echo 'Result: '.$val . ' - '. $k . '<br>';
      }
    }
 ?>

这导致:

Result: DTSTART - Array
Result: UID - 6fec1092d3fa-4126b88bbf4a059ac40146791e2f07ff@airbnb.com
Result: SUMMARY - Airbnb (Not available)
Result: DTEND - Array
Result: DTSTART - Array
Result: UID - 6fec1092d3fa-6e00333d20e7921f3dc74dff5bca3a9f@airbnb.com
Result: SUMMARY - Airbnb (Not available)
Result: DTEND - Array
Result: DTSTART - Array
Result: UID - 6fec1092d3fa-c0b7fcb782d4c41ea6dcbc5af78bfb61@airbnb.com
Result: SUMMARY - Airbnb (Not available)

这非常接近,但没有处理日期键的嵌套数组或设置断点以放入插入代码。

摘要:如何获取日期值并在代码中创建一个点以将已解析的值作为单个记录插入,然后继续从已解析的 iCalendar 文件中迭代可用数据?

根据你目前的数组结构,你需要做的

foreach ($lines[VEVENT] as $events) {
   foreach ($events as $val => $k) {
      if(is_array($k)){ // check $k is array
          echo 'Result: '.$val . ' - '. $k['value'] . '<br>';
          echo 'Result: '.$val . ' - '. $k['type'] . '<br>';
      }else{
         echo 'Result: '.$val . ' - '. $k . '<br>';
      }            
   }
}

注意:你应该用$k替换$val。通常 $k 指的是 key 而 $val 或 $v 指的是 value

或者(如果你对你的数组结构非常有信心,更实用的一种)

foreach ($lines[VEVENT] as $events) {  
   $DTENDValue = $events['DTEND']['value'];
   $DTENtype = $events['DTEND']['type'];
   $DTSTARTvalue = $events['DTSTART']['value'];
   $DTSTARTtype = $events['DTSTART']['type'];
   $UID = $events['UID'];
   $SUMMARY = $events['SUMMARY'];
}