3

現在、私は多数のphpファイルを持っており、それぞれに次の形式の配列ステートメントがあります。

$array1 = array ( array ( 'Husband' => 'bob',
                          'Wife' => 'ann' ),
                  array ( 'Husband' => 'fred',
                          'Wife' => 'donna' ),
                  array ( 'Husband' => 'john',
                          'Wife' => 'mary' ) ); 

もちろん、これはprint_r ($array1)出力(A)から返されます。

    Array ( [0] => Array (
                  [Husband] => bob [Wife] => ann ) 
           [1] => Array ( 
                  [Husband] => fred [Wife] => donna ) 
           [2] => Array ( [Husband] => john [Wife] => mary ) )

別のクラスファイルで、次のようなステートメントを使用して$array1データにアクセスします。

for ($col = 0; $col < sizeof($array1); $col++)
{
  echo $array[$col]['Wife']."<br />";
}

多くのものがデータベースであるという理論に基づいて、複数のphp配列ファイル配列内のデータをMySQLデータベースに移行し、クラスファイルからMySQLデータにアクセスしたいと考えています。そこで、MySQLで次のように設定しました。

CREATE TABLE IF NOT EXISTS `arrays` (
  `id` int(5) NOT NULL auto_increment,
  `husband` varchar(255) collate utf8_unicode_ci NOT NULL,
  `wife` varchar(255) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

INSERT INTO `arrays` (`id`, `husband`, `wife`) VALUES
(1, 'bob', 'ann'),
(2, 'fred', 'donna'),
(3, 'john', 'mary');

次に、PHPからこのMySQLデータベースにアクセスします。

$sql = "SELECT * FROM `database`.`arrays`";
$link  = mysql_connect ('localhost', 'username', 'password' ) or die(mysql_error());
mysql_select_db ('database', $link) or die(mysql_error());
$result = mysql_query ($sql) or die(mysql_error());
while($row = mysql_fetch_array($result))
{
  $array2 = array ( 'Husband' => $row['husband'],
                    'Wife' => $row['wife'] );
  print_r ($array2);
}

これにより、次のような出力(B)が生成されます。

Array ( [Husband] => bob [Wife] => ann ) 
Array ( [Husband] => fred [Wife] => donna ) 
Array ( [Husband] => john [Wife] => mary )

私の質問は、mysql_fetch_array whileループのphp配列を作成して、出力Bが出力Aのようになるようにする方法です$array[$col]['Wife']。MySQLデータベースからの方法でクラスファイルのデータに引き続きアクセスできるようにしたいです。

4

3 に答える 3

7

ここで行う必要があるのは、次を使用して、によって返されmysql_fetch_array()た配列をより大きな配列にプッシュすること[]です。

$MultiDimArray = array();

while($row = mysql_fetch_array($result))
{
  $MultiDimArray[] = array ( 'Husband' => $row['husband'], 'Wife' => $row['wife'] );
}

print_r($MultiDimArray);

さて、いくつかのコメント:

  • mysql_*拡張子を付けて新しいコードを記述せず、代わりにPDOまたはMySQLiを使用してください。
  • 明示的に数値インデックス付きのキーと連想が必要な場合を除いて、 代わりにmysqli_fetch_assoc()andを使用します。mysqli_fetch_row()mysqli_fetch_array()
  • コードでキーを使用するのと同じ方法で列に名前を付けると(大文字と小文字を含む)、の戻り値をmysqli_fetch_assoc()配列にプッシュするだけです。

例えば:

while ($MultiDimArray[] = mysql_fetch_assoc($result)) continue;
  • 構成を使用しないでくださいor die(mysql_error());。実稼働環境では(またはPDO / MySQLiと同等の)結果を表示しないでくださいmysql_error()。デバッグのために表示する必要がある場合は、すぐにコードから削除してください。
  • sizeof($array1)ループ条件として直接使用しないでください。これは非常に非効率的です。ループ中に配列のサイズが変更される可能性がある場合にのみ、これを実行する必要があります。ループの前に1回呼び出しsizeof()、結果を変数に格納して、その変数と比較$colする必要があります。

例えば:

for ($col = 0, $size = sizeof($array1); $col < $size; $col++)
{
  echo $array1[$col]['Wife']."<br />";
}

// Also, don't forget you could simply do this:
foreach ($array1 as $row)
{
  echo $row['Wife']."<br />";
}
于 2012-05-28T09:43:22.833 に答える
1

この方法でコードを変更してみてください

$array2 = array();
$sql = "SELECT * FROM `database`.`arrays`";
$link  = mysql_connect ('localhost', 'username', 'password' ) or die(mysql_error());
mysql_select_db ('database', $link) or die(mysql_error());
$result = mysql_query ($sql) or die(mysql_error());
while($row = mysql_fetch_array($result))
{
  $array2[] = array ( 'Husband' => $row['husband'],
                    'Wife' => $row['wife'] );
}

print_r ($array2);

それがあなたが探している結果だと思います

于 2012-05-28T09:44:29.343 に答える
0

たぶん次のようなことを試してください:

while($row = mysql_fetch_array($result))
{
  $temparray = array ( 'Husband' => $row['husband'],
                    'Wife' => $row['wife'] );
  array_push($array2, $temparray);
}

print_r ($array2);
于 2012-05-28T09:45:48.773 に答える