2012-12-19 25 views
12

Tôi không thể quấn đầu quanh cái này.Tại sao mảng của tôi bắt đầu bằng giá trị trống?

Khi tôi tạo một mảng, nó bắt đầu bằng một giá trị rỗng. Các giá trị cần phải có trong mảng bắt đầu như là thứ hai.

Array:

Array ( 

[0] => 

[1] => Value 1 

[2] => Value 2 

[3] => Value 3 

) 

Code:

$categories = array(); 
$query2 = mysql_query("SELECT * FROM books_categories"); 
do{ 
    array_push($categories, $category['description']); 
}while($category=mysql_fetch_assoc($query2)); 

Làm thế nào để thực hiện để có được những mục đầu tiên trong mảng được giá trị 1?

+0

Tôi nghĩ bạn nên bật báo cáo lỗi và xem có chuyện gì thế. –

+0

@AlvinWong - sẽ không có bất kỳ lỗi nào ở đây; đây là một vấn đề logic, không phải là một vấn đề cú pháp hoặc truy vấn. – SDC

+1

@MrSlippyFist - trong trường hợp bạn đang tự hỏi tại sao một nửa câu trả lời cho bạn ngừng sử dụng các hàm 'mysql_xx()', đó là vì chúng không được chấp nhận và không được khuyến khích sử dụng. Xem [Tại sao tôi không nên sử dụng các hàm mysql_ * trong PHP?] (Http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) để biết thêm thông tin và những gì để làm về chuyện đó. – SDC

Trả lời

21

Đó là vì làm trong khi vòng thử vòng lặp while

while($category=mysql_fetch_assoc($query2)){ 
    array_push($categories, $category['description']); 
} 
+1

Bạn là người nhanh nhất và quá nhanh. –

+1

Mặc dù bạn nên làm điều này: 'while (($ category = mysql_fetch_assoc ($ query2))! == false)'. Điều này sẽ đảm bảo rằng nó không sụp đổ khi có lỗi trong truy vấn hoặc nếu không có hàng. –

+0

@Rune của bạn '! == false' bit là không cần thiết; nếu nó bằng false, nó sẽ thả ra khỏi vòng lặp tốt với mã trong câu trả lời vì '$ category' sẽ được đặt thành false, sẽ kết thúc vòng lặp' while'. – SDC

5

Bởi vì bạn nên sử dụng một vòng lặp while thay vì do-while loop.

while($category = mysql_fetch_assoc($query2)) { 
    array_push($categories, $category['description']); 
} 

Trong mã của bạn thay vì trong phiên đầu tiên của vòng lặp (khi vào làm khối lần đầu tiên), $category không được thiết lập do đó thiết lập các giá trị mảng đầu tiên được sản phẩm nào.

1

Hãy thử làm điều này thay vì:

$categories = array(); 
$query2 = mysql_query('SELECT * FROM books_categories'); 
while($r = mysql_fetch_array($query2)){ 
    $categories[] = $r['description']; 
} 
+0

@mauris - Một người nào đó ở đây không thích không gian tôi thấy :-) –

+0

trong khi tôi xóa 3 dấu cách, tôi đã thêm 4 khoảng trống khác cho thụt lề. Vì -3 + 4 = 1, bạn có thể nói rằng tôi vẫn thích khoảng trắng. – mauris

+1

@maurius Tôi chấp thuận phương trình của bạn và chấp nhận câu trả lời của bạn. Bây giờ bạn có thể bay đi: D –

14

Câu trả lời rất đơn giản: bạn đang đẩy mạnh các yếu tố đầu tiên trước khi bạn đọc những dòng đầu tiên. Cách thực hiện đúng đắn sẽ là vòng lặp trước điều kiện:

$categories = array(); 
$query2 = mysql_query("SELECT * FROM books_categories"); 

while($category=mysql_fetch_assoc($query2)) { 
    array_push($categories, $category['description']); 
} 

Và, vui lòng chuyển sang sử dụng PDO.

5

Trước tiên, bạn viết giá trị (array_push()) vào mảng và sau đó bạn thực sự lấy giá trị (mysql_fetch_assoc()).

Bạn cần trước tiên lấy giá trị và sau đó đặt địa điểm vào mảng của bạn!

$categories = array(); 
$query2 = mysql_query("SELECT * FROM books_categories"); 
while(($category = mysql_fetch_assoc($query2)) !=== false) { 
    array_push($categories, $category['description']); 
} 
12

thế nào trong khi vòng lặp làm việc

enter image description here

Sự khác biệt chính từ thường xuyên trong khi vòng là phiên đầu tiên của một do-while loop được đảm bảo để chạy (các biểu hiện thật là chỉ kiểm tra ở cuối của iteration), trong khi nó có thể không nhất thiết phải chạy với một vòng lặp while (biểu thức sự thật được kiểm tra ở đầu mỗi lần lặp, nếu nó đánh giá thành FALSE ngay từ đầu, việc thực hiện vòng lặp sẽ kết thúc ngay lập tức). source

vì vậy trong chương trình, điều gì đã xảy ra, bạn đang đẩy phần tử đầu tiên trước khi bạn đọc hàng đầu tiên.

để sử dụng trong khi thay vào đó, thay vào đó hãy sử dụng

vòng lặp nào sẽ làm gì?như trong biểu đồ dòng chảy nó sẽ kiểm tra đầu tiên hơn đến cơ thể lặp bên trong nên phần tử được đẩy sau khi đọc những dòng đầu tiên

$categories = array(); 
$query2 = mysql_query("SELECT * FROM books_categories"); 

while($category=mysql_fetch_assoc($query2)) { 
    array_push($categories, $category['description']); 
} 

Note

  1. Toàn bộ PHP mở rộng ext/mysql, mà cung cấp tất cả các hàm có tên với tiền tố mysql_, là officially deprecated as of PHP v5.5.0 và sẽ bị xóa trong tương lai. Vì vậy, sử dụng một trong hai PDO hoặc MySQLi

Tốt đọc

  1. The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead
+4

Câu trả lời hay nhất. Nó có một sơ đồ, một lời giải thích văn bản, nó đề cập đến việc không dùng API nữa ... bạn cần gì khác? – Zecc

Các vấn đề liên quan