PHP多维数组赋值求助:如何为每个设备IP存入多个接口信息
如何向PHP多维数组中添加值?
你的问题出在每次内层循环时,直接用$ps_data[$dev_ip] = array($d => $ps_int[0]);覆盖了该IP对应的数组,导致只保留最后一个接口数据。同时外层循环的遍历条件也有误,应该遍历所有的l2circuit-neighbor元素,而非第一个neighbor的connection数量。
修改后的代码:
$connection = ssh2_connect('10.10.10.10', 22); ssh2_auth_password($connection, 'user', 'pass'); $stream = ssh2_exec($connection, 'show l2circuit connections brief | display json'); stream_set_blocking($stream, true); $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); $units = json_decode(stream_get_contents($stream_out), true); $ps_data = array(); // 遍历所有l2circuit-neighbor元素 $neighbors = $units["l2circuit-connection-information"][0]["l2circuit-neighbor"]; for ($i = 0; $i < count($neighbors); $i++) { $dev_ip = $neighbors[$i]["neighbor-address"][0]["data"]; // 初始化当前IP的数组(如果未存在) if (!isset($ps_data[$dev_ip])) { $ps_data[$dev_ip] = array(); } // 遍历当前neighbor下的所有connection $connections = $neighbors[$i]["connection"]; for ($d = 0; $d < count($connections); $d++) { $ps_int = explode(".", $connections[$d]["connection-id"][0]["data"]); // 向当前IP的数组中添加元素,而非覆盖 $ps_data[$dev_ip][$d] = $ps_int[0]; } } echo "<pre>"; print_r($ps_data);
关键修改点:
- 外层循环改为遍历所有
l2circuit-neighbor元素,修正遍历数量错误的问题 - 处理每个IP前先初始化对应的空数组,避免未定义索引报错
- 内层循环使用
$ps_data[$dev_ip][$d] = $ps_int[0]追加元素,而非直接覆盖整个数组
预期输出示例:
Array ( [10.255.255.140] => Array ( [0] => ps101 [1] => ps102 [4] => ps203 // 该IP对应的所有接口数据 ) // 其他IP的完整接口列表 )
内容的提问来源于stack exchange,提问作者Zura Shaishmelashvili
相关产品推荐
相关产品推荐

