【问题标题】:How can I use an array as an argument of a function?如何使用数组作为函数的参数?
【发布时间】:2016-06-10 07:00:27
【问题描述】:

我想使用数组作为函数的参数。我希望这是有效的:

function data($array){
    $pdo = Database::connect(); 
    $sql = 'SELECT  *  FROM data ORDER BY id DESC';
    foreach ($pdo->query($sql) as $row) {
       $elements = implode($array);
       echo "Start> ".$elements. "<End";
    }
 }
 $array = array("$row['id']", "$row['name']", "$row['age']", "$someothervariable");      
 data($array);

但我的结果是:Start&gt; &lt;End


编辑:

像这样一切都运行良好:

    $pdo = Database::connect(); 
    $sql = 'SELECT  *  FROM data ORDER BY id DESC';
    foreach ($pdo->query($sql) as $row) {
       echo $row['id'];
       echo $row['name'];
       echo $row['age'];
    }

【问题讨论】:

  • 在你定义它之后和调用你的函数之前做一个var_dump($array);...
  • @jeroen 结果array(3) { [0]=&gt; string(12) "" [1]=&gt; string(14) "" [2]=&gt; string(14) "" }
  • 当您执行implode($array) 时,您是否希望它评估数组中的表达式,例如$row['id']?事情不是这样运作的。它只是按字面意思组合字符串。
  • @Jarla 只是为了安全起见,您能否确认您的数据库连接在您的函数中有效?也许有 try()catch() 块?
  • 我不知道您使用的是什么 php 版本,但我预计会出现解析错误或 3 个空字符串。

标签: php arrays function foreach


【解决方案1】:

不清楚你想做什么。也许你想要这个:

function data($fields)
{
    $pdo = Database::connect(); 
    $sql = 'SELECT ' . implode(', ', $fields) . ' FROM data ORDER BY id DESC';
    foreach ($pdo->query($sql) as $row)
    {
        echo implode(', ', $row);
    }
}
$fields = array('id', 'name', 'age');      
data($fields);

【讨论】:

  • 你打败了我。
  • 谢谢,很好的解决方案!但对我来说不幸的是没有工作,因为我还需要其他变量。示例:` $array = array("$row['id']", "$row['name']", "$row['age']", "$someothervariable"); `
  • @Jarla 传递完整的变量名称以供稍后解析是不正常的。 PHP 支持它,但它不是你每天都能看到的东西……我什至会说,如果你需要它,那你就做错了。此外,data() 之外存在的任何变量都将超出范围,反之亦然。
  • 好的,是的,我认为你是对的!我会寻找不同的解决方案。
【解决方案2】:

试试这个:

function data(&$array){ // note the & sign.

【讨论】:

    【解决方案3】:
    function data($array){
        $pdo = Database::connect(); 
        $sql = 'SELECT  *  FROM data ORDER BY id DESC';
        foreach ($pdo->query($sql) as $row) {
           $elements = implode($array);
           echo $elements;
        } // this is end of foreach
    
    } // you are missing this braces
    
     $array = array("$row['id']", "$row['name']", "$row['age']");      
     data($array);
    

    工作示例:http://sandbox.onlinephpfunctions.com/code/20d306c8c7df9d4c446eebd34703a7fd68f76665

    【讨论】:

    • 哦,实际上,我的问题中缺少大括号,在我的代码中它在那里,但仍然无法正常工作
    • 我的结果是空的,在你的例子中没有数据库连接,可能有问题
    • 尝试您的数据库连接和查询。如果不是拼写错误,那么您的查询 SELECT * FROM data BY id DESC 应该是 SELECT * FROM data ORDER BY id DESC
    • 我编辑了我的问题以证明我的数据库连接运行良好
    猜你喜欢
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多