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-エラーメッセージUndefinedvariable:$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関数内で定義されており、その関数外には存在しません。

アドイン機能return $my_array;を試してくださいcreate_arry()

次に、次のような関数を呼び出します。、その関数$my_array = create_arry();によって返されたデータを$my_array変数に格納します。

于 2012-11-14T19:30:05.263 に答える
0

多分それは可変スコープについてです。関数内では、キーワード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変数は、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を宣言した場合でも、キーワード「global」を使用してグローバル変数にするか、パラメーターとしてに渡さない限り、create_array関数に対してローカルになります。働き。これは、メインプログラムで変数を宣言すると自動的にグローバルスコープが与えられる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 に答える