2012-05-28 65 views
3

目前,我有大量的PHP文件mysql_fetch_array的PHP数组,每一个与格式数组声明:如何使while循环

$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数据库。

+2

请不要打电话给你的表'阵列这是不好的做法。它应该更详细地描述您存储的对象 – allen213

回答

7

所有你需要做的就是按使用[]通过mysql_fetch_array()返回到一个更大的阵列的方向:

$MultiDimArray = array(); 

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

print_r($MultiDimArray); 

现在几点意见:

  • 不写代码为mysql_*的新代码,请使用PDOMySQLi代替。
  • 使用mysqli_fetch_assoc()mysqli_fetch_row()而不是mysqli_fetch_array(),除非您明确需要数字索引键以及关联。
  • 如果您以与在代码中使用键相同的方式命名列(包括大写字母),则可以将返回值mysqli_fetch_assoc()简单地推送到数组上。

例如:

while ($MultiDimArray[] = mysql_fetch_assoc($result)) continue; 
  • 不要使用or die(mysql_error());结构。您应该从不在生产环境中显示mysql_error()(或其PDO/MySQLi等效项)的结果,如果您必须在调试时执行此操作,请确保在之后立即将其从代码中移除。
  • 请勿直接使用sizeof($array1)作为循环条件。这是非常低效的,唯一的一次你应该这样做,如果你的数组的大小可能会在循环中改变。您应该在循环前调用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 />"; 
} 
+0

非常感谢您的解决方案和您富有洞察力的建议。我是一个更好的程序员! – user1421347

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

我相信这是你正在寻找

0

也许尝试类似的结果:

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

print_r ($array2); 
+0

我想$ array2 []是更好的,如果你一次只增加一个变量。 – Jared