2012-12-19 37 views
12

मैं इस के चारों ओर अपने सिर को लपेट नहीं सकता।मेरी सरणी खाली मूल्य के साथ क्यों शुरू होती है?

जब मैं एक सरणी बनाता हूं तो यह एक खाली मूल्य से शुरू होता है। सरणी में होने वाले मानों को दूसरे के रूप में शुरू होता है।

सरणी:

Array ( 

[0] => 

[1] => Value 1 

[2] => Value 2 

[3] => Value 3 

) 

कोड:

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

मैं कैसे सरणी में पहला आइटम मूल्य 1 होने के लिए प्राप्त करने के लिए पूरा करते हैं?

+0

पढ़ें, का उपयोग मुझे लगता है कि आप त्रुटि रिपोर्टिंग पर बारी और देखो क्या हो रहा है चाहिए। –

+0

@AlvinWong - यहां कोई त्रुटि नहीं होगी; यह एक तर्क समस्या है, सिंटैक्स या क्वेरी समस्या नहीं है। – SDC

+1

@MrSlippyFist - यदि आप सोच रहे हैं कि क्यों आधा जवाब आपको 'mysql_xx()' फ़ंक्शंस का उपयोग करना बंद कर रहे हैं, तो ऐसा इसलिए है क्योंकि उन्हें बहिष्कृत किया गया है और उपयोग के लिए अनुशंसित नहीं है। देखें [PHP में mysql_ * फ़ंक्शंस का उपयोग क्यों नहीं करना चाहिए?] (Http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) अधिक जानकारी के लिए और क्या करना है इसके बारे में करो – SDC

उत्तर

21

यह इसलिए क्योंकि ऐसा करने की, जबकि पाश की कोशिश करते हुए पाश

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

आप सबसे तेज़ और बहुत तेज़ हैं। –

+1

हालांकि यह करने की अनुशंसा की जाती है: 'जबकि (($ श्रेणी = mysql_fetch_assoc ($ query2))! == झूठी)'। यह सुनिश्चित करेगा कि क्वेरी में कोई त्रुटि होने पर या कोई पंक्ति नहीं होने पर यह क्रैश नहीं होता है। –

+0

@ अपने 'रुन करें! == झूठी' बिट जरूरी नहीं है; यदि यह झूठी के बराबर है, तो यह लूप से बाहर निकल जाएगा, जवाब में कोड के साथ ठीक है क्योंकि '$ श्रेणी' को गलत पर सेट किया जाएगा, जो 'लूप' को समाप्त कर देगा। – SDC

5

क्योंकि आप do-जबकि पाश के बजाय थोड़ी देर के पाश का उपयोग करना चाहिए।

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

बजाय पाश के पहले चरण में अपने कोड में (जब पहली बार के लिए ब्लॉक कर प्रवेश करने), $category इसलिए पहली सरणी मान सेट रिक्त सेट नहीं है।

1

इस बजाय कर प्रयास करें:

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

@ मॉरीस - यहां कोई भी रिक्त स्थान पसंद नहीं करता है :-) –

+0

जबकि मैंने 3 रिक्त स्थान हटा दिए, मैंने इंडेंटेशन के लिए 4 अन्य रिक्त स्थान जोड़े। -3 + 4 = 1 के बाद से, आप कह सकते हैं कि मुझे अभी भी रिक्त स्थान पसंद हैं। – mauris

+1

@ मॉरियस मैं आपके समीकरण को स्वीकार करता हूं और आपका उत्तर स्वीकार करता हूं। अब आप उड़ सकते हैं: डी –

14

जवाब बहुत सरल है: आप पहले तत्व बढ़ा रहे हैं इससे पहले कि आप पहली पंक्ति पढ़ें। ऐसा करने का सही तरीका प्री-कंडीशन लूप के साथ होगा:

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

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

और, कृपया पीडीओ का उपयोग करने के लिए स्विच करें।

5

आप पहले मूल्य (array_push()) को सरणी में लिखते हैं और फिर आप वास्तव में मान (mysql_fetch_assoc()) लेते हैं।

आपको पहले की आवश्यकता है और तो इसे अपने सरणी में रखें!

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

कैसे while लूप में है कि एक के पहले यात्रा करते-करते हुए पाश को चलाने के लिए गारंटी है (सच अभिव्यक्ति है, जबकि पाश नियमित से

enter image description here

मुख्य अंतर यह काम करता है कर केवल पुनरावृत्ति के अंत में जांच की जाती है), जबकि यह आवश्यक रूप से नियमित रूप से लूप के साथ नहीं चल सकता है (सत्य अभिव्यक्ति प्रत्येक पुनरावृत्ति की शुरुआत में जांच की जाती है, अगर यह शुरुआत से गलत तरीके से मूल्यांकन करती है, तो लूप निष्पादन तत्काल समाप्त हो जाएगा)। source

तो आपके प्रोग्राम में आप पहली पंक्ति को पढ़ने से पहले पहले तत्व को दबा रहे थे।

इसलिए का उपयोग करते हुए बजाय

क्या छलबल पाश क्या करेंगे?प्रवाह चार्ट में के रूप में यह पहले की जाँच करेगा से आने के अंदर पाश शरीर धक्का इतना तत्व के बाद पहली पंक्ति

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

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

नोट

  1. पूरे ext/mysql PHP एक्सटेंशन, पढ़ने के लिए है जो उपसर्ग mysql_ नामक सभी कार्यों को प्रदान करता है, officially deprecated as of PHP v5.5.0 है और भविष्य में हटा दिया जाएगा। तो या तो PDO या MySQLi

अच्छा

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

सर्वश्रेष्ठ उत्तर। इसे फ्लोचार्ट मिला है, एक पाठ स्पष्टीकरण है, यह एपीआई के बहिष्कार का उल्लेख करता है ... आपको और क्या चाहिए? – Zecc

संबंधित मुद्दे