2012-05-28 101 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