2017-11-18 4 views
1
$projects = array('1' => $link1, '2' => $link2); 

function server_status($projects) { 

    foreach ($projects as $server) { 

     $api_status = ping_api($server); 

     if ($api_status == 1) { 

      $json = json_decode(file_get_contents($server), true); 

      foreach ($json as $obj) { 
       if ($obj['online'] < 1) { 
        // OFFLINE 
        return -1; 
       } 
       else { 
        // ONLINE 
        return $obj['online']; 
       } 
      } 
     } else { 
      // MAINTENANCE 
      return 0; 
     } 
    } 
} 

function cache_status($data) { 
    echo $data; 

    $servername = "localhost"; 
    $username = "root"; 
    $password = ""; 

    try { 
     $conn = new PDO("mysql:host=$servername;dbname=test", $username, $password); 
     // set the PDO error mode to exception 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     } 
    catch(PDOException $e) 
     { 
     echo "Connection failed: " . $e->getMessage(); 
     }  

    foreach ($data as $status) { 
    // server id + status 
    $sql = "UPDATE projects SET status=:status WHERE id=:server_id"; 
    $stmt = $conn->prepare($sql); 
    $stmt->bindParam(':status', $status, PDO::PARAM_INT); 
    $stmt->bindParam(':server_id', 1, PDO::PARAM_INT); 
    $stmt->execute(); 
    } 
} 

$problem = array(server_status($projects)); 
print_r($problem); 

私の問題は、私は変数$問題をしますprint_rときに、2件の結果があるので、それは、配列内の二つの結果を返す必要があります、ですが、それが唯一の最初の結果を返すの結果ではありません配列から..例として:誰もが親切にも私のコードを見て、私が間違っているのを教えする場合アレイ([0] => 260)PHPは、私の配列内のすべてを表示するが、最初の

すると、私は

+0

などの各反復何かのためのあなたの応答を返す 'return'はすぐに機能を終了します。そのため、関数は常にチェックする最初のサーバーの状態を返します。 –

+0

あなたの質問は少し不明です。ご質問をより明確にするために、[MVCE](https://stackoverflow.com/help/mcve)のガイドをお読みください。 – mjwatts

+0

ナイジェル・レンを参照してください。そうですね?または変数を作成し、その都度値を設定する必要がありますか? –

答えて

1

非常にGREATFULになりますあなたのループ内でreturnステートメントを使用しています。これは最初の繰り返しでループを壊し、あなたがこれまで説明した関数を元の関数呼び出しに戻す理由です。あなたは配列にし、関数の最後に各反復からの応答を収集する必要があり、この問題を解決するには

function server_status($projects) { 
    $response= array(); 
    $status = 0; // default status 
    foreach ($projects as $server) { 
     $api_status = ping_api($server); 
     if ($api_status == 1) { 
      $json = json_decode(file_get_contents($server), true); 
      foreach ($json as $obj) { 
       if ($obj['online'] < 1) { 
        // OFFLINE 
        $status= -1; 
       } 
       else { 
        // ONLINE 
        $status = $obj['online']; 
       } 
      } 
     } 
     $response[] = array('server'=>$server,'status'=>$status); 
    } 
    return $response; 
} 
+1

助けてくれてありがとう、それは問題でした! –

関連する問題