PHP:未定义的偏移量:0,但不带dd()

PHP:未定义的偏移量:0,但不带dd(),php,laravel,laravel-5,Php,Laravel,Laravel 5,我得到了一个未定义的偏移量:0错误。奇怪的是,当我dd()it时,它就会出现 $ports = $container->getPorts(); $ports = $ports[0]; 这将返回未定义的偏移量:0 当我dd() 完整阵列: array:1 [▼ 0 => Port {#336 ▼ #privatePort: 80 #publicPort: 32780 #type: "tcp" } ] 我在docker php sdk中遇到了这

我得到了一个未定义的偏移量:0错误。奇怪的是,当我
dd()
it时,它就会出现

  $ports = $container->getPorts();
  $ports = $ports[0];
这将返回
未定义的偏移量:0

当我
dd()

完整阵列:

array:1 [▼
  0 => Port {#336 ▼
    #privatePort: 80
    #publicPort: 32780
    #type: "tcp"
  }
]
我在docker php sdk中遇到了这个错误。有人知道发生了什么事吗

完整代码:

public function dockerContainers()
{
    $docker = new \Docker\Docker();
    $containerManager = $docker->getContainerManager();
    $containers = $containerManager->findAll();

    $data = [];
    $x=0;
    foreach ($containers as $container) {
        $ports = $container->getPorts();
        // dd($ports[0]);
        $ports = $ports[0];
        $privatePort = $ports->getPrivatePort();
        $publicPort = $ports->getPublicPort();
        $data[$x++] = [
            'id'    => $container->getId(),
            'state'  => $container->getState(),
            'names'  => $container->getNames(),
            'image'  => $container->getImage(),
            'status' => $container->getStatus(),
            'ports'  => [
                'privatePort' => $privatePort,
                'publicPort'  => $publicPort
            ]
        ];
    }

    return view('containers', [ 'containers' => $data ]);
}

这是因为您的一个
容器
没有
端口
,最好使用laravel方法,该方法使数组成为收集对象,然后您可以使用可用的收集方法。 请尝试以下代码

foreach($containers作为$container){
//获取端口并生成laravel收集对象
$ports=collect($container->getPorts());
如果($port->first()){
$ports=$ports->first();
$privatePort=$ports->getPrivatePort();
$publicPort=$ports->getPublicPort();
$data[$x++]=[
'id'=>$container->getId(),
'state'=>$container->getState(),
'names'=>$container->getNames(),
'image'=>$container->getImage(),
'status'=>$container->getStatus(),
“端口”=>[
“privatePort”=>$privatePort,
“publicPort”=>$publicPort
]
];
}
}

完整的错误信息是什么?未定义的偏移量:0与$ports或$data相关吗?它与$ports相关。我尝试在$ports上使用foreach来获取值并将它们放入数组中。这确实有效,适合我的情况。但我仍然想知道为什么会发生这种情况。您是否尝试过$port=$port[0]@是的,它会产生相同的错误。如果执行
$ports=array\u shift($ports),会得到什么结果?我已经很久没有发布这个问题了。如果我没记错的话,在这种情况下,没有港口的集装箱是不可能的。感谢您提供的
collect()
提示。我将在几周内再次参与这个项目。如果可以再次测试,我将保持此线程的更新。
public function dockerContainers()
{
    $docker = new \Docker\Docker();
    $containerManager = $docker->getContainerManager();
    $containers = $containerManager->findAll();

    $data = [];
    $x=0;
    foreach ($containers as $container) {
        $ports = $container->getPorts();
        // dd($ports[0]);
        $ports = $ports[0];
        $privatePort = $ports->getPrivatePort();
        $publicPort = $ports->getPublicPort();
        $data[$x++] = [
            'id'    => $container->getId(),
            'state'  => $container->getState(),
            'names'  => $container->getNames(),
            'image'  => $container->getImage(),
            'status' => $container->getStatus(),
            'ports'  => [
                'privatePort' => $privatePort,
                'publicPort'  => $publicPort
            ]
        ];
    }

    return view('containers', [ 'containers' => $data ]);
}