Php 如何迭代复杂的关联数组?

Php 如何迭代复杂的关联数组?,php,foreach,Php,Foreach,我正在使用以下数组 Array ( [device_id] => 432552343242 [host_name] => computer [serial_number] => 32525243 [manufacturer] => HP [model] => ProLiant BL460c Gen9 [locations] => Array ( [0] => Array (

我正在使用以下数组

Array
(
[device_id] => 432552343242
[host_name] => computer
[serial_number] => 32525243
[manufacturer] => HP
[model] => ProLiant BL460c Gen9
[locations] => Array
    (
        [0] => Array
            (
                [name] => New York
            )

    )

[cpu_count] => 1
[core_count] => 6
[is_virtual] => 
[operating_system] => Array
    (
        [version] => 6.6 Santiago
        [product] => Array
            (
                [vendor] => Varied
                [description] => ProductAdapter for handling various Unix or 
Linux based Operating Systems (HP-UX, AIX, Solaris, Ubuntu, etc...)
                [name] => Unix Operating Systems
            )

        [name] => Linux Server
    )

[users] => mydomain.com/users
[applications] => mydomain.com/applications
[qualified_name] => Array
    (
        [0] => Array
            (
                [name_type] => UnixName
                [name] => cbc.com
            )

        [1] => Array
            (
                [name_type] => DNSFQDN
                [name] => abc.com
            )

        [2] => Array
            (
                [name_type] => DNSDomain
                [name] => bbc.com
            )

        [3] => Array
            (
                [name_type] => OriginalHostname
                [name] => cnn.com
            )

    )
)
当我尝试循环遍历数组以将其插入数据库时,我得到13个条目

这是我的密码

$array = json_decode($result, true);
foreach($array as $key=>$value) {
$hostname = $array['locations'];

$stmt = $mysqli->prepare("INSERT INTO test (Hostname) VALUES (?)");
$stmt->bind_param("s", $hostname);
$stmt->execute();
$stmt->close();
}

我知道为什么要增加13支队伍。它循环遍历数组中的每个索引,并插入每个索引的主机名。我怎样才能让它插入一个呢?我必须创建for语句吗?还是一个foreach中的foreach?如果有任何帮助,我们将不胜感激?这里是新手。

您在最大数组中循环的次数与索引的次数相同,但是您没有使用
$key
$value
。你的代码正是按照你对他说的做的:

  • 对于每个值->so 13循环
    • 获取
      $array['location']
    • 将其插入数据库
  • 结束你的旅程
如果您只想插入
$array['locations']
,为什么要使用
foreach
? 您只插入了一个值,并且您知道它是索引,所以您实际上不需要使用
foreach

使用
foreach
可以执行以下操作: 但是没有真正的必要

我更愿意这样写: [编辑] 如果要循环插入数组的不同元素,应使用
$key
$value
变量

$array = json_decode($result, true);
foreach($array as $key=>$value) {
    if ($key === "location")
    {
        $hostname = $value; //contains $array['location']

        $stmt = $mysqli->prepare("INSERT INTO test (Hostname) VALUES (?)");
        $stmt->bind_param("s", $hostname);
        $stmt->execute();
        $stmt->close();
    } else if ($key === 'device_id')
    {
        $devide_id= $value; //contains $array['device_id']

        $stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
        $stmt->bind_param("s", $devide_id);
        $stmt->execute();
        $stmt->close();
    } else if ($key === 'device_id')
    {
        $devide_id= $value; //contains $array['device_id']

        $stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
        $stmt->bind_param("s", $devide_id);
        $stmt->execute();
        $stmt->close();
    } else if ($key === 'device_id')
    {
        $devide_id= $value; //contains $array['device_id']

        $stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
        $stmt->bind_param("s", $devide_id);
        $stmt->execute();
        $stmt->close();
    } else if ($key === 'device_id')
    {
        $devide_id= $value; //contains $array['device_id']

        $stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
        $stmt->bind_param("s", $devide_id);
        $stmt->execute();
        $stmt->close();
    } else if ($key === '...')
    {
        //etc
    }
}
但如果您确切知道数组中值的键,我会这样做:

$hostname  = $array['location'];
$devide_id = $array['device_id'];

$stmt = $mysqli->prepare("INSERT INTO test (Hostname) VALUES (?)");
$stmt->bind_param("s", $hostname);
$stmt->execute();

$stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
$stmt->bind_param("s", $devide_id);
$stmt->execute();

$stmt->close();

天啊。这太明显了。非常感谢。我之所以认为foreach语句是必要的,是因为我以前使用的是大型多维数组。有点像隧道里的景象。再次感谢。
$array = json_decode($result, true);
foreach($array as $key=>$value) {
    if ($key === "location")
    {
        $hostname = $value; //contains $array['location']

        $stmt = $mysqli->prepare("INSERT INTO test (Hostname) VALUES (?)");
        $stmt->bind_param("s", $hostname);
        $stmt->execute();
        $stmt->close();
    } else if ($key === 'device_id')
    {
        $devide_id= $value; //contains $array['device_id']

        $stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
        $stmt->bind_param("s", $devide_id);
        $stmt->execute();
        $stmt->close();
    } else if ($key === 'device_id')
    {
        $devide_id= $value; //contains $array['device_id']

        $stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
        $stmt->bind_param("s", $devide_id);
        $stmt->execute();
        $stmt->close();
    } else if ($key === 'device_id')
    {
        $devide_id= $value; //contains $array['device_id']

        $stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
        $stmt->bind_param("s", $devide_id);
        $stmt->execute();
        $stmt->close();
    } else if ($key === 'device_id')
    {
        $devide_id= $value; //contains $array['device_id']

        $stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
        $stmt->bind_param("s", $devide_id);
        $stmt->execute();
        $stmt->close();
    } else if ($key === '...')
    {
        //etc
    }
}
$hostname  = $array['location'];
$devide_id = $array['device_id'];

$stmt = $mysqli->prepare("INSERT INTO test (Hostname) VALUES (?)");
$stmt->bind_param("s", $hostname);
$stmt->execute();

$stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
$stmt->bind_param("s", $devide_id);
$stmt->execute();

$stmt->close();