You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:20:34