मुझे बहुआयामी सरणी बनाने और विलय करने में कुछ परेशानी हो रही है। समझाने की कोशिश कर रहा हूं, मेरे पास गतिशील "4 इनपुट का पैक" है। वे PHP के माध्यम से उत्पन्न होते हैं और उपयोगकर्ता इनपुट के अधिक "4 पैक" जोड़ सकते हैं।

उन इनपुट को input1[en] या input1[pt] नाम दिया गया है। इसलिए, input1 के एक सरल $_POST को बेहतर ढंग से समझने के लिए, यह निम्नलिखित सरणी को प्रिंट करता है (अभी भी इनपुट 2,3 और 4 से बाहर है) जिसे अलग-अलग foreach की आवश्यकता है:

Array(
[en] => Array(
    [0] => [C][C]
    [1] => [L][L][C]
)
[pt] => Array(
    [0] => [C][C]
)
)

अब, मुझे केवल एक सरणी बनाने की आवश्यकता है जिसमें इनपुट से सभी जानकारी शामिल है, लेकिन मुझे पहले सरणी निर्माण (इनपुट 1 से) में कुछ परेशानी हो रही है।

कोड का उपयोग करना:

foreach($_POST['input1'] as $language => $index){
    foreach($index as $newvalue => $index2){
        $cernegy[$language] = array(
            'energy' => array($newvalue => $index2)                 
        );
    }
}

आउटपुट है:

Array(
[en] => Array(
    [energy] => Array(
        [1] => [L][L][C]
    )
) [pt] => Array(
    [energy] => Array(
        [0] => [C][C]
    )
)
)

जैसा कि आप देख सकते हैं कि यह [एन] के अंदर [0] कुंजी को याद करता है। अन्य इनपुट के साथ भी ऐसा ही होता है (यह केवल अंतिम कुंजी को सरणी में छोड़ देता है जब एक ही भाषा के लिए कई इनपुट होते हैं (इस मामले में [एन]))

मेरे अन्य foreach समान हैं, लेकिन 'energy' => array($newvalue => $index2) को 'attack' => array($newvalue => $index2) में बदल देते हैं और इसी तरह...

फिर, दूसरी समस्या सरणियों का विलय कर रही है। अगर मैं दो सरणियों (यहां तक ​​​​कि गलत जानकारी के साथ) को मर्ज करता हूं, तो यह केवल अंतिम मर्ज किए गए सरणी को रखता है। मूल रूप से अगर मैं array1 (जो 'energy' को array2 के साथ मर्ज करता हूं (जो 'attack' उत्पन्न करता है) तो यह केवल array2 से जानकारी रखता है उदाहरण के लिए:

Array(
[en] => Array(
    [attack_name] => Array(
        [1] => RazorLeaf
    )
) 
[pt] => Array(
    [attack_name] => Array(
        [0] => Pontapé
    )
)
)

और यह कुछ ऐसा होना चाहिए:

Array(
[en] => Array(
    [energy] => Array(
        [1] => [L][L][C]
    )
    [attack_name] => Array(
        [1] => RazorLeaf
    )
) 
[pt] => Array(
    [energy] => Array(
        [0] => [C][C]
    )
    [attack_name] => Array(
        [0] => Pontapé
    )
)
)

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

$result = array_merge($array1, $array2);

क्या कोई मुझे दोनों समस्याओं में सही दिशा में इंगित कर सकता है? आपके समय के लिए धन्यवाद।

संपादित करें: पहला भाग अब हल हो गया है। समस्या अब दो सरणियों के विलय में बनी हुई है। दो सरणियों के उदाहरण के रूप में (क्रम में $array1 और $array2): सरणी1

Array(
[en] => Array(
    [energy] => Array(
        [0] => [C][C]
        [1] => [L][L][C]
    )
) 
[pt] => Array(
    [energy] => Array(
        [0] => [C][C]
    )
)
)

Array2

Array(
[en] => Array(
    [attack_name] => Array(
        [0] => Tackle
        [1] => RazorLeaf
    )
) 
[pt] => Array(
    [attack_name] => Array(
        [0] => Pontapé
    )
)
)

जैसा कि मैं $result = array_merge($array1, $array2); का उपयोग करता हूं, मैं प्राप्त करने की उम्मीद कर रहा था:

Array(
[en] => Array(
    [energy] => Array(
        [0] => [C][C]
        [1] => [L][L][C]
    )
    [attack_name] => Array(
        [0] => Tackle
        [1] => RazorLeaf
    )
) 
[pt] => Array(
    [energy] => Array(
        [0] => [C][C]
    )
    [attack_name] => Array(
        [0] => Pontapé
    )
)
)

लेकिन मुझे केवल आउटपुट के रूप में $array2 जानकारी मिलती है:

Array(
[en] => Array(
    [attack_name] => Array(
        [0] => Tackle
        [1] => RazorLeaf
    )
) 
[pt] => Array(
    [attack_name] => Array(
        [0] => Pontapé
    )
)
)

मैं क्या गलत कर रहा हूँ?

1
Tiago 3 अक्टूबर 2018, 17:06

1 उत्तर

सबसे बढ़िया उत्तर

आप सरणी में जोड़ने के बजाय मान को अधिलेखित कर रहे हैं। कुछ ऐसा प्रयास करें:

foreach($_POST['input1'] as $language => $index){
    $inner = array();
    foreach($index as $newvalue => $index2){
        $inner[$newvalue] = $index2;
     }
     $cernegy[$language] = array('energy' => $inner);
}
3
Eleonora Ivanova 3 अक्टूबर 2018, 17:41