PHP json_decode 多个数组或数组中的数组到数据库

问题描述 投票:0回答:1

我有来自另一个系统的json,如何存储在oracle数据库中?我不介意使用 while 或 for 或什么,我只希望可以在数据库中存储 4 行,没有空行作为另一个系统提供的空行。我已经参考了很多问题,但没有找到像我这样的类似案例数据。

这就是 json 示例

{
  "ErrorCode": "00",
  "ErrorMessage": "",
  "ServiceList": {
    "ServiceDetail": [
      {
        "Service_name": [
          "LTE_DATA_PRI_1",
          "LTE_ONM_PRI_2"
        ],
        "AVLAN": [
          "LTE_DATA_PRI_SITE_1",
          "LTE_DATA_PRI_SITE_2"
        ],
        "IpAddress": [
          "192.168.1/20",
          "192.168.2/20"
        ],
        "AggPort": [
          "GigabitEthernet 1/1/10.1000",
          "GigabitEthernet 1/1/10.1001"
        ]
      },
      "\r\n",
      "\r\n",
      {
        "Service_name": [
          "LTE_DATA_SEC_1",
          "LTE_ONM_SEC_2"
        ],
        "AVLAN": [
          "LTE_DATA_SEC_SITE_1",
          "LTE_DATA_SEC_SITE_2"
        ],
        "IpAddress": [
          "192.168.3/20",
          "192.168.4/20"
        ],
        "AggPort": [
          "GigabitEthernet 1/1/10.1003",
          "GigabitEthernet 1/1/10.1004"
        ]
      },
      "\r\n",
      "\r\n"
    ]
  }
}

预期显示或存储在数据库中

应该是

下面是我在 php 文件中的代码,但它只保存主要的

$i = 0;
$x = 0;

$arrayLength = count($array['ServiceList']['ServiceDetail']);

while ($x < $arrayLength)
{
    
    $arrayLength2 = count($array['ServiceList']['ServiceDetail'][$x]['AVLAN']);
    
    while ($i < $arrayLength2)
    {
        $AVLAN1 = $array['ServiceList']['ServiceDetail'][$x]['AVLAN'];
        
        if ( $AVLAN1 !== null){
    
        $p_avlan = $array['ServiceList']['ServiceDetail'][$x]['AVLAN'][$i];
        $p_agg_port = $array['ServiceList']['ServiceDetail'][$x]['AggPort'][$i];
        $p_ip_address = $array['ServiceList']['ServiceDetail'][$x]['IpAddress'][$i];
        $p_service_name = $array['ServiceList']['ServiceDetail'][$x]['Service_name'][$i];
        
        // sql procedure here //

        $i++;
    
        }
    } // while 2
    $x++;
} // while 1

php arrays json while-loop oracle
1个回答
0
投票

使用 foreach 而不是 while 循环可以让您不必计算条目数并保持自己的循环索引。

在内层,循环遍历

Service_name
条目,然后使用该循环的键来访问同一层上其他数组中的相应元素。

foreach($array['ServiceList']['ServiceDetail'] as $serviceDetail) {
    if(is_array($serviceDetail)) {
        foreach($serviceDetail['Service_name'] as $key => $p_service_name) {
            $p_avlan = $serviceDetail['AVLAN'][$key];
            $p_ip_address = $serviceDetail['IpAddress'][$key];
            $p_agg_port = $serviceDetail['AggPort'][$key];
        
            var_dump($p_service_name, $p_avlan, $p_ip_address, $p_agg_port);
        }
    }
}

https://3v4l.org/O9MWM

© www.soinside.com 2019 - 2024. All rights reserved.