2011-04-12 6 views
10

मैं PHP के लिए नया हूँ। मेरे पास बराबर आकार के दो एरे $array1 और $array2 हैं। मैं तो जैसे सरणियों के माध्यम से पुनरावृति करने के लिए foreach छोरों का उपयोग कर:क्या मैं foreach के साथ बराबर आकार के दो loops के माध्यम से पुनरावृत्त कर सकते हैं?

foreach($array1 as $element1) { 
     //Do stuff with $element1 
} 

और

foreach($array2 as $element2) { 
     //Do stuff with $element2 
} 

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

मैं यह कैसे कर सकता हूं? बजाय पाश के लिए

+3

क्या पहले सरणी में * कुंजी * दूसरे में समान हैं? यह विवरण उत्तर को निर्देशित करेगा। – Charles

+0

@ चार्ल्स मुझे विश्वास है कि – Adam

+0

उत्कृष्ट है, जो इसे आसान बनाता है। – Charles

उत्तर

10
while (($element1 = next($array1)) !== false) { 
    $element2 = next($array2); 
    // Do something 
} 

लेकिन यह, असफल हो जायेगी अगर false$array1 में एक की अनुमति दी मूल्य है। तो (इस मामले में) false$array2 में अनुमति नहीं है, तो आप सिर्फ दोनों

ए 'foreach "-solution (दोनों शेयरों यदि एक ही कुंजी)

foreach ($array1 as $i => $element1) { 
    $element2 = $array2[$i]; 
    // Do something 
} 

एक तिहाई (मैं काफी अच्छा लगता है स्वैप कर सकते हैं) समाधान है कि बस आदिम प्रकार की अनुमति देता है $array1

foreach (array_combine(array_values($array1), array_values($array2)) as $element1 => $element2) { 
    // Do something 
} 
+0

'अगली' चाल तब तक काम करेगी जब तक कि पहले सरणी में कोई झूठी बात न हो। – Charles

+0

हां, मुझे पता है, लेकिन मुझे इसके लिए एक (इतना जटिल नहीं) समाधान नहीं मिला। हालांकि, मैंने दो अन्य तरीकों को जोड़ा और कम से कम एक फिट होना चाहिए :) तीसरा मुझे बहुत अच्छा लगता है, लेकिन इसकी सीमा भी है। – KingCrunch

1

उपयोग एक ...

for($i = 0;$i<count($array1);$i++) { 
    /* access $array1[$i] and $array2[$i] here */ 
} 

अगर सरणियों के अनुक्रमित सांख्यिक हैं, तो यह काम करेंगे और एक ही दोनों सरणियों

+0

केवल संख्यात्मक सरणी के लिए काम करता है। –

+0

यह ** foreach ** लूप नहीं है ... प्रश्न 'क्या मैं foreach के साथ बराबर आकार के दो loops के माध्यम से पुनरावृत्ति कर सकते हैं?' लेकिन हाँ, यह कुंजी के रूप में nums के लिए काम करता है :) – Wh1T3h4Ck5

+1

@ Wh1T3h4Ck5, फिर से शुरू करने के और तरीके हैं एक बिल्ली त्वचा की तुलना में PHP में एक सरणी। उनमें से सभी * किसी दिए गए परिस्थिति में उपयुक्त हो सकते हैं। – Charles

0

के बारे में क्या
$i = 0; 
foreach($array1 as $element) { 

    // Do stuff with the element 
    $stuff_from_this_array = $element; 
    $stuff_from_other_array = $array2[$i]; 
    $i++; 

} 

के लिए आप 'जाहिर है कि $ stuff_this_array और $ stuff_from_other_array कुछ और लगातार रखना चाहते हैं, लेकिन शायद यह आपको एक विचार देता है।

+0

यह तोड़ता है जब सरणी में संख्यात्मक, अनुक्रमिक कुंजी नहीं होती है। – Charles

2

Each में कुंजी और मान से युक्त एक सरणी देता है, और अगले तत्व सूचक अग्रिम। आखिरी तत्व से आगे बढ़ने के बाद यह झूठा हो जाता है।

// Iterate until one of the arrays is complete 
while (($a = each($array_a)) !== false && ($b = each($array_b)) !== false) { 
    echo "The key:value from array_a is {$a['key']}:{$a['value']}.\n"; 
    echo "The key:value from array_b is {$b['key']}:{$b['value']}.\n"; 
} 

दोनों सरणीओं पर पूरी तरह से पुन: सक्रिय करने के लिए, || & & के बजाय।

+0

... मुझे यह भी नहीं पता था कि मैं ऐसा कर सकता हूं! गजब का!!! –

0

यह एक संभावित समाधान है। यदि आप सीधे() सीधे शुरू करते हैं, तो आपको सरणी का पहला तत्व कभी नहीं मिलता है।

reset($array1); reset($array2); 
for ($element1 = current($array1), $element2 = current($array2); 
     $element1 !== false && $element2 !== false; 
     $element1 = next($array1), $element2 = next($array2)) { 
    // Do something 

} 

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

  • कोई संबंधित समस्या नहीं^_^