2017-10-10 11 views
4

laravelでUndefined offset: 0エラーが発生しました。奇妙なことは、私がdd()それを表示するときです。PHP:定義されていないオフセット:0、dd()ではありません

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

I dd()

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

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

フル配列するとこれはUndefined offset: 0

を返します。

array:1 [▼ 
    0 => Port {#336 ▼ 
    #privatePort: 80 
    #publicPort: 32780 
    #type: "tcp" 
    } 
] 

は私がドッキングウィンドウ-PHPのSDKで、このエラーを取得しています。何が起こっているのかを知っている人は誰ですか?

全コード:あなたのcontainerの一つは、コレクションオブジェクトにあなたの配列を行い、その後、使用可能な収集方法を使用することができますlaravel collect()メソッドを使用することをお勧めしports持っていないため、

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に関連しています。私は値を取得して配列に入れるために$ ports以上のforeachを試しました。これは動作し、私の場合に合っています。しかし、私はまだこれがどうして起こっているのか疑問に思います。 –

+0

あなたは$ port = $ ports [0];を試しましたか? –

答えて

0

これがあります。

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()'ヒントをありがとう。私は数週間後に再びこのプロジェクトに取り組んでいきます。私はこのスレッドを更新することができたら更新しておきます。 –

関連する問題