एचटीएमएल/PHP-फॉर्म-सरणी के रूप में इनपुट




html html-input (3)

मुझे इस तरह का एक फॉर्म मिला

<form>
<input type="text" class="form-control" placeholder="Titel" name="levels[level]">
<input type="text" class="form-control" placeholder="Titel" name="levels[build_time]">

<input type="text" class="form-control" placeholder="Titel" name="levels[level]">
<input type="text" class="form-control" placeholder="Titel" name="levels[build_time]">

</form>

मैं $ _POST आउटपुट के रूप में क्या करना चाहता हूं जैसे एक सरणी है

Array ( 
  [1] => Array ( [level] => 1 [build_time] => 123 ) 
  [2] => Array ( [level] => 2 [build_time] => 456 )
)

मुझे पता है कि मैं नाम = "स्तर [1] [build_time]" जैसे कुछ कर सकता हूं और इसी तरह से, लेकिन चूंकि इन तत्वों को गतिशील रूप से जोड़ा जाता है, इसलिए एक अनुक्रमणिका जोड़ना मुश्किल होगा। क्या कोई और तरीका है?

संपादित करें:

जैसा कि सुझाव दिया गया, मैंने अपना फॉर्म बदल दिया। मैंने अब अपना पूरा HTML भी शामिल किया है, क्योंकि मुझे लगता है कि मुझे यहां कुछ याद आ रहा है। मेरा एचटीएमएल अब:

<div class="form-group">
  <label class="col-md-2">Name(z.B. 1)</label>
  <div class="col-md-10">
    <input type="text" class="form-control" placeholder="Titel" name="levels[][level]">
  </div>

  <label class="col-md-2">Bauzeit(In Sekunden)</label>
  <div class="col-md-10">
    <input type="text" class="form-control" placeholder="Titel" name="levels[][build_time]">
  </div>
</div>

<div class="form-group">
  <label class="col-md-2">Name(z.B. 1)</label>
  <div class="col-md-10">
    <input type="text" class="form-control" placeholder="Titel" name="levels[][level]">
  </div>

  <label class="col-md-2">Bauzeit(In Sekunden)</label>
  <div class="col-md-10">
    <input type="text" class="form-control" placeholder="Titel" name="levels[][build_time]">
  </div>
</div>

अब मुझे प्राप्त होने वाला आउटपुट है:

[levels] => Array ( 
  [0] => Array ( [level] => 1 ) 
  [1] => Array ( [build_time] => 234 ) 
  [2] => Array ( [level] => 2 ) 
  [3] => Array ( [build_time] => 456 ) 
)

2 संपादित करें:

जैसा कि आपके संपादन में सुझाया गया है, मैंने अपना फॉर्म संपादित किया और स्क्वायर ब्रैकेट को नाम के अंत में ले जाया। अब मुझे प्राप्त होने वाला आउटपुट है:

[levels] => Array ( 
  [level] => Array ( 
    [0] => 1 
    [1] => 2 
  ) 
  [build_time] => Array ( 
    [0] => 234 
    [1] => 456 
  )
) 

मुझे लगता है कि थोड़े काम करेंगे लेकिन यह अभी भी जटिल लग रहा है। कोई बेहतर तरीका नहीं है?


अगर आपके लिए सरणी को इंडेक्स करना ठीक है तो आप यह कर सकते हैं:

<form>
    <input type="text" class="form-control" placeholder="Titel" name="levels[0][level]">
    <input type="text" class="form-control" placeholder="Titel" name="levels[0][build_time]">

    <input type="text" class="form-control" placeholder="Titel" name="levels[1][level]">
    <input type="text" class="form-control" placeholder="Titel" name="levels[1][build_time]">

    <input type="text" class="form-control" placeholder="Titel" name="levels[2][level]">
    <input type="text" class="form-control" placeholder="Titel" name="levels[2][build_time]">
</form>

... यह प्राप्त करने के लिए:

[levels] => Array ( 
  [0] => Array ( 
    [level] => 1 
    [build_time] => 2 
  ) 
  [1] => Array ( 
    [level] => 234 
   [build_time] => 456 
  )
  [2] => Array ( 
    [level] => 111
    [build_time] => 222 
  )
) 

लेकिन अगर आप फ़ॉर्म के बीच से इनपुट की एक जोड़ी (गतिशील रूप से, मुझे लगता है) हटा दें तो आपको अपने सरणी में छेद मिलेगा, जब तक आप इनपुट नाम अपडेट नहीं करते ...


इसके अतिरिक्त: जिनके पास खाली पोस्ट वैरिएबल है, उनके लिए इसका उपयोग न करें:

name="[levels][level][]"

बल्कि इसका उपयोग करें (जैसा कि यह पहले से ही इस उदाहरण में है):

name="levels[level][]"

बस उन नामों में [] जोड़ें

 <input type="text" class="form-control" placeholder="Titel" name="levels[level][]">
 <input type="text" class="form-control" placeholder="Titel" name="levels[build_time][]">

उस टेम्पलेट को ले लो और फिर आप लूप का उपयोग करके भी उन्हें जोड़ सकते हैं।

फिर आप इंडेक्स प्रदान किए बिना जितनी चाहें उतनी गतिशील रूप से जोड़ सकते हैं। PHP उन्हें आपके अपेक्षित परिदृश्य उदाहरण की तरह उठाएगा।

संपादित करें

क्षमा करें, मुझे गलत जगह पर ब्रेसिज़ था, जो हर नए मान को एक नए सरणी तत्व के रूप में बनाएगा। अब अपडेट किए गए कोड का उपयोग करें और यह आपको निम्न सरणी संरचना देगा

levels > level (Array)
levels > build_time (Array)

दोनों उप सरणी पर एक ही सूचकांक आपको अपनी जोड़ी देगा। उदाहरण के लिए

echo $levels["level"][5];
echo $levels["build_time"][5];




html-input