2017-12-12 11 views
-2

にPHPの関数の出力を割り当てます。はここに私の現在のコードだ変数

function get_coins() { 
    global $conn; 
    $new_sql = "SELECT * FROM marketcaps ORDER BY cap DESC LIMIT 25"; 
    $new_result = $conn->query($new_sql); 
    while ($row = $new_result->fetch_assoc()) { 
     $id = $row["id"]; 
     $coin = $row["coin"]; 
     $cap = $row["cap"]; 
     echo $coin . '~USD,'; 
    } 
} 

$coins = get_coins(); 

ここで私が把握することはできませんものです。

ライン$coins = get_coins();は私の関数からすべてのデータをエコーし​​、Iれます理由を理解していない。私の機能には次の行があります。echo $coin . '~USD,';

$coins = get_coins();を追加すると、なぜそれがエコーされますか?

これを代わりに追加する必要はありませんか?

$coins = get_coins(); 
$echo coins; 

基本的に何もエコーしたくないので、出力を変数に割り当てたいだけです。それを行う簡単な方法はありますか?

+2

機能がecho'データ 'いけない、彼らは'それをreturn'必要があります。 –

+1

get_coins()を呼び出して関数を呼び出すため、関数が実行され、何らかの機能が実行されます(エコー$コインをエコーし​​ます)。変数にクエリ文字列の結果をすべて保存しますか? –

+0

'echo'を' return'に置き換えた場合、最初のMySQL結果のみが表示されます。 – Chase

答えて

0

は、私は完全な結果セットの配列を返す私の解決策で焼いてきた原則です:

  • globalを使用しないでください、パラメータとして$connを渡します関数。
  • 単一使用変数を宣言しないでください。ただし、読みやすさを大幅に向上させたり、デバッグ処理を支援したりしない限りは使用しないでください。
  • 処理する特定の行のみを照会します。

はコード推奨:

function get_coins($conn){ 
    $result=$conn->query("SELECT id,coin,cap FROM marketcaps ORDER BY cap DESC LIMIT 25"); 
    for($resultset=[]; $row=$result->fetch_assoc(); $resultset[]=$row); // inspired by: http://php.net/manual/en/mysqli-result.fetch-assoc.php#112924 
    return $resultset; 
} 

$coin_rows=get_coins($conn); 

foreach($coin_rows as $row){ 
    // ... reference $row['id'] , $row['coin'] , $row['cap'] during your processes 
} 
1

returnステートメントを関数に追加する必要があります。また、複数の行を処理する場合は、配列(ID別インデックス)に照合してください。ここで

http://php.net/manual/en/function.return.php

function get_coins() 
{ 
    global $conn; 
    $coins = array(); 
    $new_sql = "SELECT * FROM marketcaps ORDER BY cap DESC LIMIT 25"; 
    if($new_result = $conn->query($new_sql)) 
    { 
     while($row = $new_result->fetch_assoc()) 
     { 
      $coins[ $row["id"] ] = $row["coin"] . '~USD,'; 
     } 
    } 
    return (!empty($coins)) ? $coins : null; 
} 
+0

私はこれを試してみましたが、後で 'foreach'文を使ってすべてをエコーすることができました。しかし、それでも私は変数に出力を割り当てることができません... – Chase

+0

はい、それは配列を返します。 'foreach(get_coins()as $ coin)'が動作すれば、 '$ coins = get_coins();'も動作します。このデータをどのように使用しようとしていますか? – Scuzzy

+0

結果全体を返す必要があるようです。だから$ coins [$ iterablevar] = $ row; –

関連する問題