访问嵌套数据,没有太多的foreach循环

时间:2017-05-09 12:05:46

标签: php arrays foreach

我需要对大型数据集执行“深度循环”以访问某些嵌套值(对于数据库插入)。

目前我有以下代码,它可以工作,但它非常慢,并且在所有数据处理完毕之前最终超时。我不知道如何在不做这么多循环的情况下获取嵌套数据。

示例数组:

$resultArray = [
  {
    "item1": "value",
    "item2": "value",
    "item3": "value",
    "item4": "value",
    "item5": [
      {
        "anothervalue1": "value",
        "anothervalue2": "value",
        "anothervalue3": "value",
        "anothervalue4": "value",
        "anothervalue5": "value"        
      },
      {
        "anothervalue1": "value",
        "anothervalue2": "value",
        "anothervalue3": "value",
        "anothervalue4": "value",
        "anothervalue5": "value" 
      },
      {
        "anothervalue1": "value",
        "anothervalue2": "value",
        "anothervalue3": "value",
        "anothervalue4": "value",
        "anothervalue5": "value" 
      }
      {
        // another 150+
      }
    ]
  }
];

当前实施:

// Loop over main array
foreach ($resultArray as $object) {
  // Loop over each object
  foreach ($object as $key => $value) {
    if ($key === 'item5') {
      // Loop over each 'item5' object
      foreach ($value as $history_key => $history_value) {
        foreach ($history_value as $history_deep_key => $history_deep_value) {
            $arr = array( 
                $_GET['someparam'], // column1 data
                $object['item1'], // column2 data
                $_GET['anotherparam'], // column3 data
                $object['item2'], // column4 data
                $history_value['anothervalue1'], // column5 data
                $history_value['anothervalue2'], // column6 data
                $history_value['anothervalue3'], // column7 data
                $history_value['anothervalue4'], // column8 data
                $history_value['anothervalue5'], // column9 data
                $object['item3'] // column10 data
            );
            $statement = $link->prepare("INSERT INTO reporting_clients(column1, column2, column3, column4, column5, column6, column7, column8, column9, column10)
                VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
            $statement->execute($arr);
        }
      }
    }
  }
}

是否可以在没有foreach次循环的情况下访问嵌套数据?

1 个答案:

答案 0 :(得分:2)

是的,如果你知道要访问什么值并且你知道你拥有的对象数组的键和结构或者任何数组,那么它是可能的。

在你的情况下。电子克

$value = $resultArray[0]->item5[0]->anothervalue5;
echo $value;

如果它是一个多维数组而不是对象数组,只需用数组框更改箭头。

$value = $resultArray[0]['item5'][0]['anothervalue5'];
echo $value;