फ़ॉरच लूप में दो सरणियाँ


98

मैं एक उत्पन्न करना चाहते हैं selectbox दो सरणियों का उपयोग , जिसमें एक देश कोड और दूसरा देश नाम शामिल है।

यह एक उदाहरण है:

<?php
    $codes = array('tn','us','fr');
    $names = array('Tunisia','United States','France');

    foreach( $codes as $code and $names as $name ) {
        echo '<option value="' . $code . '">' . $name . '</option>';
    }
?>

यह विधि मेरे काम नहीं आई। कोई सुझाव?

जवाबों:


155
foreach( $codes as $code and $names as $name ) { }

यह मान्य नहीं है।

आप शायद ऐसा ही कुछ चाहते हैं ...

foreach( $codes as $index => $code ) {
   echo '<option value="' . $code . '">' . $names[$index] . '</option>';
}

वैकल्पिक रूप से, कोड को अपने $namesसरणी की कुंजी बनाना बहुत आसान होगा ...

$names = array(
   'tn' => 'Tunisia',
   'us' => 'United States',
   ...
);

पार्सिंग फॉर्म फील्ड एरेज़ में उपयोगी।
Ryu_hayabusa

85

foreach एक समय में केवल एक सरणी पर काम करता है।

जिस तरह से आपकी सरणी संरचित है, आप array_combine()उन्हें कुंजी-मूल्य जोड़े की एक सरणी में रख सकते हैं , फिर foreachवह एकल सरणी:

foreach (array_combine($codes, $names) as $code => $name) {
    echo '<option value="' . $code . '">' . $name . '</option>';
}

या जैसा कि अन्य उत्तरों में देखा गया है, आप इसके बजाय एक सहयोगी सरणी को हार्डकोड कर सकते हैं।


क्या यह तीन सरणियों के लिए भी इस्तेमाल किया जा सकता है?
xjshiya

@xjshiya नहीं, यदि आप उन्हें 3 पैरामीटर देते हैं तो आपको चेतावनी मिलती है: array_combine () बिल्कुल 2 मापदंडों की अपेक्षा करता है, 3 दिए गए
जूलियन


6

एक साहचर्य सरणी का उपयोग करें:

$code_names = array(
                    'tn' => 'Tunisia',
                    'us' => 'United States',
                    'fr' => 'France');

foreach($code_names as $code => $name) {
   //...
}

मेरा मानना ​​है कि एक साहचर्य सरणी का उपयोग करना सबसे समझदार दृष्टिकोण है, क्योंकि इसका उपयोग करने के विपरीत है array_combine()क्योंकि एक बार आपके पास एक साहचर्य सरणी है, तो आप बस उसी सरणी का उपयोग कर सकते हैं array_keys()या array_values()प्राप्त कर सकते हैं जो आपके पास पहले थी।


+1 array_combine()पहले से ही एक सहयोगी सरणी का उत्पादन करता है, आप इसे सहयोगी के रूप में आरंभ करने के बारे में स्पष्ट होना चाहते हैं ।
BoltClock

4

array_map इसके लिए भी अच्छा लगता है

$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');

array_map(function ($code, $name) {
    echo '<option value="' . $code . '">' . $name . '</option>';
}, $codes, $names);

अन्य लाभ हैं:

  • यदि एक सरणी दूसरे से छोटी है, तो कॉलबैक nullअंतराल में भरने के लिए मान प्राप्त करता है।

  • के माध्यम से पुनरावृति करने के लिए आप 2 से अधिक सरणियों का उपयोग कर सकते हैं।


3

सिर्फ एक बहुआयामी साहचर्य सरणी में क्यों नहीं समेकित किया जाता है ? लगता है कि आप इस गलत के बारे में जा रहे हैं:

$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');

हो जाता है:

$dropdown = array('tn' => 'Tunisia', 'us' => 'United States', 'fr' => 'France');

1
इसे एक सहयोगी सरणी कहा जाता है, न कि बहुआयामी सरणी।
BoltClock

3

सभी पूरी तरह से परीक्षण किया

एक सरणी से एक गतिशील ड्रॉपडाउन बनाने के 3 तरीके।

यह एक सरणी से एक ड्रॉपडाउन मेनू बनाएगा और स्वचालित रूप से अपने संबंधित मूल्य को असाइन करेगा।

विधि # 1 (सामान्य ऐरे)

<?php

$names = array('tn'=>'Tunisia','us'=>'United States','fr'=>'France');

echo '<select name="countries">';

foreach($names AS $let=>$word){
    echo '<option value="'.$let.'">'.$word.'</option>';
}
echo '</select>';
 
?>


विधि # 2 (सामान्य ऐरे)

<select name="countries">

<?php

$countries = array('tn'=> "Tunisia", "us"=>'United States',"fr"=>'France');
foreach($countries as $select=>$country_name){
echo '<option value="' . $select . '">' . $country_name . '</option>';
}
?>

</select>


विधि # 3 (सहयोगी सरणी)

<?php

$my_array = array(
     'tn' => 'Tunisia',
     'us' => 'United States',
     'fr' => 'France'
);

echo '<select name="countries">';
echo '<option value="none">Select...</option>';
foreach ($my_array as $k => $v) {
    echo '<option value="' . $k . '">' . $v . '</option>';
}
echo '</select>';
?>

1
हम्म ... नीचे के लिए बिना रुकावट। नीच, कारण और देखभाल विस्तृत करने के लिए? जाहिर है "सिर्फ क्यूज"। मेह ~
फंक फोर्टी निनेर

4
क्या ये सब एक ही चीज नहीं हैं? मुझे चर के नामों के अलावा कोई महत्वपूर्ण अंतर नहीं दिखता है।
पैट्रिक

3

foreach केवल एकल सरणी के साथ काम करता है। कई सरणियों के माध्यम से कदम रखने के लिए, थोड़ी देर के लूप में प्रत्येक () फ़ंक्शन का उपयोग करना बेहतर होता है:

while(($code = each($codes)) && ($name = each($names))) {
    echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>';
}

प्रत्येक () सरणी की वर्तमान कुंजी और मूल्य के बारे में जानकारी देता है और आंतरिक पॉइंटर को एक से बढ़ाता है, या यदि वह सरणी के अंत तक पहुंच गया है तो गलत रिटर्न देता है। यह कोड समान कुंजी वाले या समान प्रकार के तत्वों वाले दो सरणियों पर निर्भर नहीं होगा। दो सरणियों में से एक समाप्त होने पर लूप समाप्त हो जाता है।


3

यह मेरे लिए काम किया:

$codes = array('tn', 'us', 'fr');
$names = array('Tunisia', 'United States', 'France');
foreach($codes as $key => $value) {
    echo "Code is: " . $codes[$key] . " - " . "and Name: " . $names[$key] . "<br>";
}

यह काम करता है, लेकिन यह कुंजी के रूप में कोड और मूल्यों के रूप में नाम के साथ एक एकल सरणी के लिए अधिक स्पष्ट है ...
Ferdinand.kraft

2

आप दो सरणियों को संयोजित करने के लिए array_merge का उपयोग कर सकते हैं और फिर उन पर पुनरावृति कर सकते हैं।

$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);

2

इसे बाहर चलना...

$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
  • PHP 5.3+

    array_walk($codes, function ($code,$key) use ($names) { 
        echo '<option value="' . $code . '">' . $names[$key] . '</option>';
    });
  • PHP 5.3 से पहले

    array_walk($codes, function ($code,$key,$names){ 
        echo '<option value="' . $code . '">' . $names[$key] . '</option>';
    },$names);
  • या गठबंधन

    array_walk(array_combine($codes,$names), function ($name,$code){ 
        echo '<option value="' . $code . '">' . $name . '</option>';
    })
  • चयन में

    array_walk(array_combine($codes,$names), function ($name,$code){ 
        @$opts = '<option value="' . $code . '">' . $name . '</option>';
    })
    echo "<select>$opts</select>";

डेमो


2
<?php

$codes = array ('tn','us','fr');
$names = array ('Tunisia','United States','France');

echo '<table>';

foreach(array_keys($codes) as $i) {

     echo '<tr><td>';
     echo ($i + 1);
     echo '</td><td>';
     echo $codes[$i];
     echo '</td><td>';
     echo $names[$i];
     echo '</td></tr>';
}

echo '</table>';

?>

2

फ़ॉरच लूप के बजाय, इसे आज़माएं (केवल तभी जब आपके सरणियों की लंबाई समान हो)।

$number = COUNT($_POST["codes "]);//count how many arrays available
if($number > 0)  
{  
  for($i=0; $i<$number; $i++)//loop thru each arrays
  {
    $codes =$_POST['codes'][$i];
    $names =$_POST['names'][$i];
    //ur code in here
  }
}

1

मुझे लगता है कि आप कुछ ऐसा कर सकते हैं:

$ कोड = सरणी ('tn', 'us', 'fr');

$ नाम = सरणी ('ट्यूनीशिया', 'संयुक्त राज्य अमेरिका', 'फ्रांस');

foreach ($codes as $key => $code) {
    echo '<option value="' . $code . '">' . $names[$key] . '</option>';
}

यह साहचर्य सरणियों के लिए भी काम करना चाहिए।


1

मुझे लगता है कि सबसे आसान तरीका सिर्फ इस तरह से लूप का उपयोग करना है:

$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');

for($i = 0; $i < sizeof($codes); $i++){
    echo '<option value="' . $codes[$i] . '">' . $names[$i] . '</option>';
}

1

इस तरह का आपका कोड केवल एकल सरणी के लिए foreach के रूप में गलत है:

<?php
        $codes = array('tn','us','fr');
        $names = array('Tunisia','United States','France');

        foreach( $codes as $code and $names as $name ) {
            echo '<option value="' . $code . '">' . $name . '</option>';
            }
?>

वैकल्पिक, इसे बदलें:

<?php
        $codes = array('tn','us','fr');
        $names = array('Tunisia','United States','France');
        $count = 0;

        foreach($codes as $code) {
             echo '<option value="' . $code . '">' . $names[count] . '</option>';
             $count++;
        }

?>

0

array_combine()$_POSTशॉपिंग कार्ट में उत्पादों की मात्रा को अपडेट करने के प्रयास में कई फॉर्म इनपुट से कई मूल्यों को मिलाते हुए मेरे लिए बहुत अच्छा काम किया ।


0
if(isset($_POST['doors'])=== true){
$doors = $_POST['doors'];
}else{$doors = 0;}

if(isset($_POST['windows'])=== true){
$windows = $_POST['windows'];
}else{$windows = 0;}

foreach($doors as $a => $b){

अब आप प्रत्येक ऐरे के लिए $ का उपयोग कर सकते हैं ...।

$doors[$a]
$windows[$a]
....
}

0

मैंने तुम्हारी तरह एक समस्या को हल किया:

foreach(array_keys($idarr) as $i) {
 echo "Student ID: ".$idarr[$i]."<br />";
 echo "Present: ".$presentarr[$i]."<br />";
 echo "Reason: ".$reasonarr[$i]."<br />";
 echo "Mark: ".$markarr[$i]."<br />";
}

0

आपको सिंगल फ़ॉरच लूप में 2 एरे डालने के लिए यह प्रयास करना चाहिए मान लीजिए कि मेरे पास 2 एरे 1. $ item_nm 2. $ आइटम-qty है

 `<?php $i=1; ?>
<table><tr><td>Sr.No</td> <td>item_nm</td>  <td>item_qty</td>    </tr>

  @foreach (array_combine($item_nm, $item_qty) as $item_nm => $item_qty)
<tr> 
        <td> $i++  </td>
        <td>  $item_nm  </td>
        <td> $item_qty  </td>
   </tr></table>

@endforeach `

0

कुछ सरणियों को भी इस तरह प्रसारित किया जा सकता है:

foreach($array1 as $key=>$val){ // Loop though one array
    $val2 = $array2[$key]; // Get the values from the other arrays
    $val3 = $array3[$key];
    $result[] = array( //Save result in third array
      'id' => $val,
      'quant' => $val2,
      'name' => $val3,
    );
  }

-2

इससे मेरा काम बनता है

$counter = 0;
foreach($codes as $code)
{
$codes_array[$counter]=$code;
$counter++;
}
$counter = 0;
foreach($names as $name)
{
echo $codes_array[$counter]."and".$name;
$counter++;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.