将PHP函数的输出分配给变量

时间:2017-12-12 00:51:21

标签: php function return resultset

这是我目前的代码:

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();正在回显我函数中的所有数据,我不明白为什么。我知道我的函数有这一行:echo $coin . '~USD,';

但是当我添加$coins = get_coins();

时,为什么会回响呢?

我不应该添加这个吗?

$coins = get_coins();
$echo coins;

基本上我不想回应任何东西,我只想将输出分配给变量。有没有一种简单的方法可以做到这一点?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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
}