मैं एक array में लूपिंग कर रहा हूं और प्रत्येक element को associative key के साथ किसी अन्य सरणी में प्राप्त करने और पुश करने का प्रयास कर रहा हूं। फिर इसे किसी अन्य सरणी में फिर से धक्का दें जो Row सरणी के रूप में कार्य करता है। लूप को पिछले element को अगले Row सरणी पर नहीं धकेलना चाहिए। लेकिन यह लूप के अंत तक दोहराता रहता है

मुझे जो आउटपुट मिल रहा है।

Array
(
    [Row1] => Array
        (
            [Container1] => Container is empty at row 1
        )

    [Row2] => Array
        (
            [Container1] => Container is empty at row 1
            [Container2] => Container is empty at row 2
        )

    [Row4] => Array
        (
            [Container1] => Container is empty at row 1
            [Container2] => Container is empty at row 2
            [Container4] => Container is empty at row 4
        )

    [Row5] => Array
        (
            [Container1] => Container is empty at row 1
            [Container2] => Container is empty at row 2
            [Container4] => Container is empty at row 4
            [Container5] => Container is empty at row 5
        )

    [Row6] => Array
        (
            [Container1] => Container is empty at row 1
            [Container2] => Container is empty at row 2
            [Container4] => Container is empty at row 4
            [Container5] => Container is empty at row 5
            [Container6] => Container is empty at row 6
        )

मुझे जो आउटपुट चाहिए।

Array
    (
        [Row1] => Array
            (
                [Container1] => Container is empty at row 1
            )

        [Row2] => Array
            (
                [Container2] => Container is empty at row 2
            )

        [Row4] => Array
            (
                [Container4] => Container is empty at row 4
            )

        [Row5] => Array
            (
                [Container5] => Container is empty at row 5
            )

        [Row6] => Array
            (
                [Container6] => Container is empty at row 6
            )

नीचे मेरी लूप के लिए है

<?php

$errorArray = array();
$ContainerError = array();

for ($i = 1; $i < count($namedDataArray); $i++) { 
    if ($namedDataArray[$i][1] == ''){
        echo '<pre>';
        $ContainerError['Container'.$i] = 'Container is empty at row '. $i;
        echo '</pre>';
        $errorArray['Row'.$i] = $ContainerError;
    }
}
0
Drenyl 4 सितंबर 2018, 05:42

3 जवाब

मैंने इसे if statement के अंत में $ContainerError = array(); को फिर से प्रारंभ करके प्राप्त किया

2
Drenyl 4 सितंबर 2018, 05:52

आप प्रत्येक लूप के अंत में $ContainerError को फिर से शुरू कर सकते हैं जैसा आपने किया था और यह ठीक काम करेगा। जाने का एक और तरीका, यदि लूप काफी बड़ा है तो थोड़ा अधिक कुशल है, लूप में प्रवेश करने से पहले एक बार सरणी को प्रारंभ करना और फिर प्रत्येक लूप के अंत में unset($ContainerError); के साथ इसे अनसेट करना है।

प्रभाव बिल्कुल वही है, लेकिन अतीत में मैंने इसे निष्पादन समय के एक या दो सेकंड को दाढ़ी बनाने के लिए पाया है जब लूप हजारों पुनरावृत्तियों में जाता है

1
Javier Larroulet 4 सितंबर 2018, 06:16
मैं बेहतर निष्पादन समय के लिए उस परेशान करने वाली सरणी के लिए ध्यान रखूंगा। धन्यवाद!
 – 
Drenyl
4 सितंबर 2018, 10:05

एक सरल और आसान समाधान, आपको $ContainerError की आवश्यकता नहीं है:

<?php
array_walk($namedDataArray, function($row,$index) use (&$errorArray){
    static $i=0; // You can use $index instead of $i
    $errorArray['Row'.$i]['Container'.$i] = 'Container is empty at row '. $i++;
});

परीक्षण:

<?php

$errorArray = array();
$ContainerError = array();


$namedDataArray = range(0, 6);

array_walk($namedDataArray, function() use (&$errorArray){
    static $i=0;
    $errorArray['Row'.$i]['Container'.$i] = 'Container is empty at row '. $i++;
});


print_r( $errorArray );

दिखाता है:

Array
(
    [Row0] => Array
        (
            [Container0] => Container is empty at row 
        )

    [Row1] => Array
        (
            [Container1] => Container is empty at row 1
        )

    [Row2] => Array
        (
            [Container2] => Container is empty at row 2
        )

    [Row3] => Array
        (
            [Container3] => Container is empty at row 3
        )

    [Row4] => Array
        (
            [Container4] => Container is empty at row 4
        )

    [Row5] => Array
        (
            [Container5] => Container is empty at row 5
        )

    [Row6] => Array
        (
            [Container6] => Container is empty at row 6
        )

)
1
Kerkouch 4 सितंबर 2018, 08:01
array_walk फ़ंक्शन के बारे में जानकर अच्छा लगा। मैं इसे अपने भविष्य के प्रोजेक्ट्स में आजमाउंगा। धन्यवाद!
 – 
Drenyl
4 सितंबर 2018, 10:02