0

我有以下创建数组的代码。

$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有点新,所以简单的解释将不胜感激!

谢谢

4

4 回答 4

0

$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;

我并不完全清楚您要执行的功能是什么,但我想我会指出这一点。

于 2012-11-14T19:55:41.443 回答
0

也许它与变量范围有关。在函数内部,只有在 self 函数的局部范围内可用的变量,除非它由关键字 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]);
于 2012-11-14T19:32:48.080 回答
0

您的问题涉及变量范围

有多种方法可以解决这个问题,但鉴于您的函数名称,我希望return是数组。

例如:

function create_array() {
  // current code

  return $my_array;
}

$arr = create_array();
var_dump($arr);
于 2012-11-14T19:33:13.337 回答
0

$my_array在函数内部定义,在该函数之外不存在。

尝试添加功能return $my_array;create_arry()

然后像这样调用函数:$my_array = create_arry();,将该函数返回的数据存储在$my_array变量中。

于 2012-11-14T19:30:05.263 回答