2017-10-10 27 views
4

我得到一個Undefined offset: 0與laravel錯誤。奇怪的是,當我dd()它,它出現了。PHP:未定義偏移量: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" 
    } 
] 

我收到此錯誤與泊塢窗的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 ]); 
} 
+0

什麼是完整的錯誤消息? Undefined offset:0是否與$ ports或$ data有關? – kerrin

+1

它與$ ports有關。我嘗試了一個$端口的foreach來獲取值並將它們放入一個數組中。這確實有效,並適合我的情況。但我仍然想知道爲什麼會發生這種情況。你試過 –

+0

$ port = $ ports [0];? –

回答

0

這是因爲你container的一個沒有ports是用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 
      ] 
     ]; 
    } 
} 
+1

我發佈這個問題已經很長時間了。如果我確實記得,在這種情況下無法使用端口的容器是不可能的。感謝'collect()'提示。我將在幾周內再次開展這個項目。如果我可以再次測試,我會保持這個線程更新。 –