PHP array में form input array कैसे प्राप्त करें


92

मेरे पास एक फॉर्म है, जिसके नीचे कॉन्टेक्ट्स एफपीपी है, और उपयोगकर्ता गतिशील रूप से jquery के साथ अधिक जोड़ सकता है।

<input type="text" name="name[]" />
<input type="text" name="email[]" />

<input type="text" name="name[]" />
<input type="text" name="email[]" />

<input type="text" name="name[]" />
<input type="text" name="email[]" />

अगर मैं उन्हें नीचे दिए गए कोड के साथ php में इको करता हूँ

$name = $_POST['name'];
$email = $_POST['account'];

foreach( $name as $v ) {
print $v;
}

foreach( $email as $v ) {
print $v;
}

मुझे कुछ इस तरह मिलेगा:

name1name2name3email1email2email3

नीचे दिए गए कोड की तरह मैं उन सरणियों को कैसे प्राप्त कर सकता हूं

function show_Names($n, $m)
{
return("The name is $n and email is $m, thank you");
}

$a = array("name1", "name2", "name3");
$b = array("email1", "email2", "email3");

$c = array_map("show_Names", $a, $b);
print_r($c);

इसलिए मेरा आउटपुट इस तरह है:

नाम name1 है और ईमेल email1 है , धन्यवाद आप
का नाम name2 है और ईमेल email2 है , धन्यवाद आप
का नाम name3 है और ईमेल email3 है , धन्यवाद

किसी भी मदद या सलाह के लिए धन्यवाद

जवाबों:


146

वे पहले से ही सरणियों में हैं: $nameएक सरणी है, जैसा कि है$email

तो आपको बस इतना करने की ज़रूरत है कि दोनों सरणियों पर हमला करने के लिए थोड़ा सा प्रोसेसिंग जोड़ा जाए:

$name = $_POST['name'];
$email = $_POST['account'];

foreach( $name as $key => $n ) {
  print "The name is ".$n." and email is ".$email[$key].", thank you\n";
}

अधिक जानकारी को संभालने के लिए, बस पैटर्न का विस्तार करें:

$name = $_POST['name'];
$email = $_POST['account'];
$location = $_POST['location'];

foreach( $name as $key => $n ) {
  print "The name is ".$n.", email is ".$email[$key].
        ", and location is ".$location[$key].". Thank you\n";
}

धन्यवाद, क्या होगा अगर मैंने स्थान की तरह एक और इनपुट जोड़ा [], मैं इसे कैसे जोड़ सकता हूं?
थॉम

1
मूल रूप से, आप सिर्फ पैटर्न का विस्तार करते हैं। ऊपर मेरा संपादन देखें ... जब आप उन्हें $ _POST से असाइन करते हैं, तो कोई अतिरिक्त इनपुट भी सरणियों में होगा (यह मानते हुए कि html में उस नाम के साथ कई इनपुट हैं, जैसा आपने इन क्षेत्रों के साथ किया था)।
जेफरी ब्लेक

1
जेफरी, मुझे आश्चर्य है कि अगर मैं सरणियों के आदेश पर भरोसा कर सकता हूं। यही है, क्या हमें यकीन है कि $emails[1]नामित उपयोगकर्ता के अनुरूप है $name[1]? मुझे लगता है कि मैं अतीत में इसके साथ समस्याओं में भाग गया था लेकिन मैं गलत हो सकता हूं। धन्यवाद
११

1
@bruciasse - जिस तरह से सर्वर इनपुट इनपुट सरणियों को संभालता है, वह एक वेब सर्वर से दूसरे (अलग-अलग OSes अलग-अलग चीजों को कार्यान्वित करता है जब यह इस तरह से बारीक से बारीक विवरण में आता है), हालांकि हर प्लेटफॉर्म पर मैंने इन तकनीकों को नियोजित किया है। खुद (यानी आदेश हर बार एक ही है)। यह संभव है कि एक सर्वर के लिए अनुरोध पारित करने से पहले एक ब्राउज़र अनुरोध चर के आदेश को मिला सकता है, लेकिन मैं यह उम्मीद करूंगा कि यह काफी असामान्य होगा। अंतिम मुद्दा जो आप सामना कर सकते हैं, वह है html को एक अजीब क्रम में मिलाया जाना और सीएसएस का समायोजन
जेफरी ब्लेक

... स्थिति। यदि आपका पृष्ठ ऐसा था, तो यह निश्चित रूप से कुछ अजीब मुद्दों w / r / t को सरणियों का आदेश देगा।
जेफरी ब्लेक

51

जैसे खेतों का नामकरण करके

<input type="text" name="item[0][name]" />
<input type="text" name="item[0][email]" />

<input type="text" name="item[1][name]" />
<input type="text" name="item[1][email]" />

<input type="text" name="item[2][name]" />
<input type="text" name="item[2][email]" />

(जो जावास्क्रिप्ट के माध्यम से तत्वों को जोड़ने पर भी संभव है)

इसी php स्क्रिप्ट की तरह लग सकता है

function show_Names($e)
{
  return "The name is $e[name] and email is $e[email], thank you";
}

$c = array_map("show_Names", $_POST['item']);
print_r($c);

4

मैं अब थोड़ा देर से जानता हूं, लेकिन आप ऐसा कुछ कर सकते हैं:

function AddToArray ($post_information) {
    //Create the return array
    $return = array();
    //Iterate through the array passed
    foreach ($post_information as $key => $value) {
        //Append the key and value to the array, e.g.
            //$_POST['keys'] = "values" would be in the array as "keys"=>"values"
        $return[$key] = $value;
    }
    //Return the created array
    return $return;
}

के साथ परीक्षण:

if (isset($_POST['submit'])) {
    var_dump(AddToArray($_POST));
}

यह मेरे लिए निर्मित:

array (size=1)
  0 => 
    array (size=5)
      'stake' => string '0' (length=1)
      'odds' => string '' (length=0)
      'ew' => string 'false' (length=5)
      'ew_deduction' => string '' (length=0)
      'submit' => string 'Open' (length=4)

2

यदि आपको फ़ील्ड्स की सरणी मिल गई है तो क्या होगा?

<fieldset>
<input type="text" name="item[1]" />
<input type="text" name="item[2]" />
<input type="hidden" name="fset[]"/>
</fieldset>

<fieldset>
<input type="text" name="item[3]" />
<input type="text" name="item[4]" />
<input type="hidden" name="fset[]"/>
</fieldset>

मैंने फ़ील्ड्स की संख्या गिनने के लिए एक छिपे हुए फ़ील्ड को जोड़ा। उपयोगकर्ता फ़ील्ड को जोड़ या हटा सकता है और फिर उसे सहेज सकता है।


2

मैं इस समस्या के रूप में अच्छी तरह से आया था। 3 इनपुट दिए गए: फ़ील्ड [], फ़ील्ड 2 [], फ़ील्ड 3 []

आप इनमें से प्रत्येक फ़ील्ड को गतिशील रूप से एक्सेस कर सकते हैं। चूंकि प्रत्येक फ़ील्ड एक सरणी होगी, संबंधित फ़ील्ड सभी समान सरणी कुंजी साझा करेंगे। उदाहरण के लिए, दिए गए इनपुट डेटा:

  • बॉब, bob@bob.com, पुरुष
  • मार्क, mark@mark.com, पुरुष

बॉब और उसका ईमेल और सेक्स एक ही कुंजी साझा करेगा। इसे ध्यान में रखते हुए, आप डेटा को इस तरह से लूप में एक्सेस कर सकते हैं:

    for($x = 0; $x < count($first_name); $x++ )
    {
        echo $first_name[$x];
        echo $email[$x];
        echo $sex[$x];
        echo "<br/>";
    }

यह तराजू भी। जब भी आपको नए फ़ील्ड जोड़ने की आवश्यकता होती है, तो आपको केवल अपनी संबंधित सारणी को जोड़ना होगा।


0

हालांकि, ईमेल और उपयोगकर्ता नाम के बीच मिस कपल से बचने के लिए वोल्कर का समाधान सबसे अच्छा है। तो आपको इस तरह PHP के साथ HTML कोड उत्पन्न करना होगा:

<? foreach ($i = 0; $i < $total_data; $i++) : ?>
    <input type="text" name="name[<?= $i ?>]" />
    <input type="text" name="email[<?= $i ?>]" />
<? endforeach; ?>

अपनी आवश्यकताओं के अनुरूप $ total_data बदलें। इसे दिखाने के लिए, बस इस तरह:

$output = array_map(create_function('$name, $email', 'return "The name is $name and email is $email, thank you.";'), $_POST['name'], $_POST['email']);
echo implode('<br>', $output);

यह मानते हुए कि डेटा POST विधि का उपयोग करके भेजा गया था।


0

फिर भी, आप नीचे दिए गए कोड का उपयोग कर सकते हैं,

$a = array('name1','name2','name3');
$b = array('email1','email2','email3');

function f($a,$b){
    return "The name is $a and email is $b, thank you";
}

$c = array_map('f', $a, $b);

//echoing the result

foreach ($c as $val) {
    echo $val.'<br>';
}


-4

इस विधि का उपयोग करके काम करना चाहिए:

$name = $_POST['name'];
$email = $_POST['account'];
while($explore=each($email)) {
    echo $explore['key'];
    echo "-";
    echo $explore['value'];
    echo "<br/>";
}

अपना उत्तर चरण-दर
krisdestruction
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.