PHP: undefined offset :0,但不是 dd()

标签 php laravel laravel-5

我在使用 laravel 时遇到了 Undefined offset: 0 错误。奇怪的是,当我 dd() 它时,它出现了。

  $ports = $container->getPorts();
  $ports = $ports[0];

这将返回 Undefined offset: 0

当我 dd()

$ports = $container->getPorts();
dd($ports[0]);

Port {#336 
  #privatePort: 80
  #publicPort: 32780
  #type: "tcp"
}

完整数组:

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 collect()使您的数组成为集合对象的方法,然后您可以使用可用的集合方法。 试试下面的代码...

    foreach ($containers as $container) {
            //getting ports and making laravel collection object
        $ports = collect($container->getPorts());
       if($ports->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(),
            'ports'  => [
                'privatePort' => $privatePort,
                'publicPort'  => $publicPort
            ]
        ];
    }
}

关于PHP: undefined offset :0,但不是 dd(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46676773/

相关文章:

php - 使用 CodeIgniter 创建 SQL 函数

php - mysql查询和php

javascript - Vue.js 上失去自动融合功能

php - 拉维尔 5.1 : SQL query 'where LIKE %word%word%word%' not working

php - PHP将不会显示任何错误

php - mysql 表中的枚举值

php - 无法在 Tinker 中使用 Laravel Factory

javascript - Laravel 与 JWT Auth : Get error message with status code

php - Laravel 5.2 在 Eloquent SQL 查询中遇到问题

php - JQuery - 组复选框