Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组在include文件中创建得很好,但在函数中没有创建_Php - Fatal编程技术网

Php 数组在include文件中创建得很好,但在函数中没有创建

Php 数组在include文件中创建得很好,但在函数中没有创建,php,Php,我有以下创建数组的代码 $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)中,然后

我有以下创建数组的代码

$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),那么一切都可以正常工作,$myu数组可以被称为fine。但是,如果我将此代码设置为一个函数(示例2),并从代码中调用它,然后尝试使用数组,则会得到消息$my_数组尚未定义

示例1-显示阵列

include 'array.php';
var_dump($my_array[1]);
示例2-获取错误消息Undefined变量:$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有点陌生,所以简单的解释将不胜感激


感谢

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

尝试添加
返回$myu数组
create\u arry()函数中


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

可能是关于变量范围的。在函数内部,变量仅在自函数的局部范围内可用,除非其由关键字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]);
你的问题涉及到

有多种方法可以解决这个问题,但是给定函数的名称,我希望它返回数组

例如:

function create_array() {
  // current code

  return $my_array;
}

$arr = create_array();
var_dump($arr);
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]);

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

function create_array() {
  // current code

  return $my_array;
}

$arr = create_array();
var_dump($arr);
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,在JavaScript中,在主程序中声明一个变量会自动给它一个全局范围

另一方面,当您使用MySQL_fetch_assoc函数从MySQL获取数据时,您可以节省一个步骤,该函数将以关联数组的形式返回查询结果,字段名作为键。比如说,

while (($row = mysql_fetch_assoc())
将为您提供:

$row["foo_id"] = value1;
$row["foo1"] = value2;
$row["foo3"] = value3;

我不完全清楚你想做什么,但我想我会指出这一点。

请不要使用
mysql.*
函数,因为它们在应用程序中。使用or代替and。@JasonMcCreary我只是想知道他们是否会贬低这些函数。我是一个新的PDO皈依者,我永远不会回头。对眼前的问题没有建设性的意见,但建议PDO的意见是a+1。@FireCrakcer37,很高兴看到它。这对未来是有建设性的:)谢谢,谢谢,谢谢!!简单的解释和完美的工作。给我一块饼干!