PHP:未定义的偏移量:0,但不带dd()
我得到了一个未定义的偏移量:0错误。奇怪的是,当我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中遇到了这
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 ]);
}