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();