【问题标题】:How to iterate through array with nested arrays to insert into DB (php)如何使用嵌套数组遍历数组以插入数据库(php)
【发布时间】:2021-08-27 23:35:47
【问题描述】:

我试图弄清楚如何从 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 循环。按名称访问所需的值。

标签: php arrays database icalendar


【解决方案1】:

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

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>';
      }            
   }
}

注意:您应该将 $val 替换为 $k。一般来说,$k 指的是键,而 $val 或 $v 指的是值

或者(如果您对自己的数组结构非常有信心,则更实用)

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'];
}

【讨论】:

    猜你喜欢
    • 2015-11-14
    • 2021-08-18
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多