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

Assign output of PHP function to a variable

这是我当前的代码:

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;

基本上我不想回显任何东西,我只想将输出分配给一个变量。有简单的方法吗?

您需要在您的函数中添加一个 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;
}

以下是我在解决方案中融入的原则,returns 完整的结果集数组:

  • 不要使用 global,将 $conn 作为参数传递给函数。
  • 不要声明一次性变量,除非它显着提高可读性或有助于调试过程。
  • 只查询您打算处理的特定列和行。

建议代码:

function get_coins($conn): array {
    return $sql
        ->query("SELECT id,coin,cap
                 FROM marketcaps
                 ORDER BY cap DESC
                 LIMIT 25")
        ->fetch_all(MYSQLI_ASSOC);
}

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