在包含文件中创建数组,但不在函数中

gcum 发布于 2019-02-11 php 最后更新 2019-02-11 21:14 9 浏览

我有下面的代码创建一个数组。

$qry="SELECT foo_id, foo1, foo2 FROM foo_table";
$result=mysql_query($qry);
while($row = mysql_fetch_array($result)){
extract($row);  
$my_array[$foo_id] = array('foo1' => $foo1, 'foo2'  => $foo2);
}
如果我把它保存在一个单独的文件(array.php)中,然后在我的代码中包含这个(例子1),一切正常,$ my_array可以被调用。但是,如果我将此代码设置为函数(示例2),并从我的代码中调用它,然后尝试使用该数组,我会收到$ my_array尚未定义的消息。 示例1 - 显示数组
include 'array.php';
var_dump($my_array[1]);
示例2 - 获取错误消息Undefined variable:$ my_array
function create_array(){
  $qry="SELECT foo_id, foo1, foo2 FROM foo_table";
  $result=mysql_query($qry);
while($row = mysql_fetch_array($result)){
  extract($row);    
  $my_array[$foo_id] = array('foo1' => $foo1, 'foo2'  => $foo2);
  }
}
create_array();
var_dump($my_array[1]);
我在做一些根本性错误?我有点新的PHP如此简单的解释将不胜感激! 谢谢
已邀请:

tfugit

赞同来自:

也许是关于可变范围的。在函数内部,只有在自身函数的局部范围内可用的变量,除非它由关键字global定义。

function create_array(){
  global $my_array;
  $qry="SELECT foo_id, foo1, foo2 FROM foo_table";
  $result=mysql_query($qry);
while($row = mysql_fetch_array($result)){
    extract($row);    
    $my_array[$foo_id] = array('foo1' => $foo1, 'foo2'  => $foo2);
  }
}
create_array();
var_dump($my_array[1]);
或者更好的函数返回值:
function create_array(){
  $qry="SELECT foo_id, foo1, foo2 FROM foo_table";
  $result=mysql_query($qry);
while($row = mysql_fetch_array($result)){
    extract($row);    
    $my_array[$foo_id] = array('foo1' => $foo1, 'foo2'  => $foo2);
  }
  return $my_array;
}
$my_array = create_array();
var_dump($my_array[1]);

jeum

赞同来自:

您的问题涉及variable scope。 有多种方法可以解决这个问题,但考虑到你的函数名称,我希望return是数组。 例如:

function create_array() {
  // current code
return $my_array;
}
$arr = create_array();
var_dump($arr);

vsit

赞同来自:

$ my_array变量是create_array函数的本地变量。它不存在于create_array之外。如果要在函数外部使用变量,则必须使用“global”关键字(不推荐)将其设置为全局,或者只是将数组作为返回值传递回主程序。例如:

function create_array(){
  $qry="SELECT foo_id, foo1, foo2 FROM foo_table";
  $result=mysql_query($qry);
while($row = mysql_fetch_array($result)){
    extract($row);    
    $my_array[$foo_id] = array('foo1' => $foo1, 'foo2'  => $foo2);
  }
    return $my_array;
}
$my_array = create_array();
var_dump($my_array[1]);
PHP变量作用域的工作方式,即使您先在主程序中声明了$ my_array,它仍然是create_array函数的本地函数,除非您使用关键字“global”将其作为全局变量或将其作为参数传递给功能。它与其他一些语言不同,例如JavaScript,在主程序中声明变量会自动赋予它全局范围。 顺便说一句,当您通过使用mysql_fetch_assoc函数从MySQL获取数据时,您可以节省一步,该函数将以关联数组的形式返回查询结果,并将字段名称作为键。例如,
while (($row = mysql_fetch_assoc())
会给你:
$row["foo_id"] = value1;
$row["foo1"] = value2;
$row["foo3"] = value3;
我并不完全清楚你想要做什么功能,但我想我会指出这一点。

liste

赞同来自:

$my_array在函数内部定义,不存在于该函数之外。 尝试在create_arry()函数中添加return $my_array;。 然后调用这样的函数:$my_array = create_arry();,将该函数返回的数据存储在$my_array变量中。