php

2010-03-12 6 views
90

के साथ POST के माध्यम से एक बहुआयामी सरणी सबमिट करना मेरे पास एक php रूप है जिसमें कॉलम (उदा। शीर्ष व्यास, नीचे व्यास, कपड़े, रंग, मात्रा) की ज्ञात संख्या है, लेकिन इसमें अज्ञात संख्या में पंक्तियां हैं, क्योंकि उपयोगकर्ता कर सकते हैं पंक्तियों को जोड़ने के रूप में उन्हें जोड़ें।php

मैंने पाया है कि प्रत्येक फ़ील्ड (कॉलम) को कैसे लेना है और उन्हें स्वयं की एक सरणी में रखना है।

<input name="topdiameter['+current+']" type="text" id="topdiameter'+current+'" size="5" /> 
<input name="bottomdiameter['+current+']" type="text" id="bottomdiameter'+current+'" size="5" /> 

तो क्या मैं HTML में अंत है:

<tr> 
    <td><input name="topdiameter[0]" type="text" id="topdiameter0" size="5" /></td> 
    <td><input name="bottomdiameter[0]" type="text" id="bottomdiameter0" size="5" /></td> 
</tr> 
<tr> 
    <td><input name="topdiameter[1]" type="text" id="topdiameter1" size="5" /></td> 
    <td><input name="bottomdiameter[1]" type="text" id="bottomdiameter1" size="5" /></td> 
</tr> 

...and so on. 

मैं अब क्या करना चाहते हैं क्या ले सभी पंक्तियों और स्तंभों उन्हें एक बहुआयामी सरणी में डाल दिया और की सामग्री को ईमेल है कि ग्राहक के लिए (अधिमानतः अच्छी तरह से स्वरूपित तालिका में)। मैं वास्तव में समझ नहीं पा रहा हूं कि उन सभी इनपुट को कैसे गठबंधन करना है और एक अच्छी सरणी में चयन करना है।

इस बिंदु पर, मुझे कई 1 डी सरणी का उपयोग करने की कोशिश करनी होगी, हालांकि मुझे लगता है कि एक एकल 2 डी सरणी का उपयोग करना कई 1 डी सरणी का उपयोग करने से बेहतर अभ्यास होगा।

उत्तर

131

प्रस्तुत करने पर, आप एक सरणी मिलेगा के रूप में अगर इस तरह बनाया:

$_POST['topdiameter'] = array('first value', 'second value'); 
$_POST['bottomdiameter'] = array('first value', 'second value'); 

हालांकि, मैं आपके प्रारूप नामों को इस प्रारूप में बदलने का सुझाव दूंगा:

name="diameters[0][top]" 
name="diameters[0][bottom]" 
name="diameters[1][top]" 
name="diameters[1][bottom]" 
... 

उस प्रारूप का उपयोग करके, मूल्यों के माध्यम से लूप करना बहुत आसान है।

if (isset($_POST['diameters'])) 
{ 
    echo '<table>'; 
    foreach ($_POST['diameters'] as $diam) 
    { 
     // here you have access to $diam['top'] and $diam['bottom'] 
     echo '<tr>'; 
     echo ' <td>', $diam['top'], '</td>'; 
     echo ' <td>', $diam['bottom'], '</td>'; 
     echo '</tr>'; 
    } 
    echo '</table>'; 
} 
+0

धन्यवाद! मैं इसके करीब आना शुरू कर दूंगा, हालांकि मेरे पास कॉलम और पंक्तियां फिसल गई थीं। – Fireflight

+0

यदि आप टेक्स्ट फ़ील्ड क्लोन कर रहे हैं और 'name = "व्यास [0] [शीर्ष] जैसे सूची के लिए नाम जोड़ने में कोई नियंत्रण नहीं है, तो मेरे पास एक से अधिक नाम होने पर मैं क्या कर सकता हूं? जैसे शीर्ष, नीचे, बाएं और दाएं? @ डिस्ग्रंटल्डगोट –

15

आप इस तरह के नामकरण के साथ सभी मापदंडों प्रस्तुत कर सकते हैं:

params[0][topdiameter] 
params[0][bottomdiameter] 
params[1][topdiameter] 
params[1][bottomdiameter] 

फिर बाद में आप कुछ इस तरह करते हैं:

foreach ($_REQUEST['params'] as $item) { 
    echo $item['topdiameter']; 
    echo $item['bottomdiameter']; 
} 
संबंधित मुद्दे