第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何展平和輸出兩個多維數(shù)組并打印成對值的組合?

如何展平和輸出兩個多維數(shù)組并打印成對值的組合?

PHP
LEATH 2023-04-02 11:21:02
我有 2 個輸入數(shù)組:$data1 = array (    0 => 0,    1 => array ( 0 => 4, 1 => 8, ),    2 => 0,    3 => array ( 0 => 2, 1 => 6, 2 => 10, ),    4 => array ( 0 => 1, 1 => 5, ),    5 => array ( 0 => 3, 1 => 7, 2 => 11, ),)$data2 = array (    0 => 0,    1 => array ( 0 => 1, 1 => 5, ),    2 => array ( 0 => 4, 1 => 8, ),    3 => 0,)從第一個數(shù)組讀取葉節(jié)點時,我的意思是迭代第二個數(shù)組的所有葉節(jié)點并打印所有配對組合。我的問題是,只有子數(shù)組中的最后一個值$data1被打印,并且只有最后一個值$data2被打印。我的代碼:foreach ($data1 as $sourcevalue){    if( is_array($sourcevalue) == "1")    {        foreach ($sourcevalue as $value)        {            $source=$value;        }    }    else     {        $source=$sourcevalue;    }    foreach ($data2 as $endvalue){        if( is_array($endvalue) == "1")        {            foreach ($endvalue as $value1){                $end=$value1;            }        }        else         {            $end=$endvalue;        }    }    echo $source." ".$end."<br>";   }我目前的輸出:0 08 00 010 05 011 0期望的輸出:0 00 10 50 40 80 04 04 14 54 44 84 08 08 18 58 48 88 00 00 10 50 40 80 02 02 12 52 42 82 06 06 16 56 46 86 010 010 110 510 410 810 01 01 11 51 41 81 05 05 15 55 45 85 03 03 13 53 43 83 07 07 17 57 47 87 011 011 111 511 411 811 0我如何修改我的代碼以顯示所有組合?
查看完整描述

2 回答

?
慕妹3242003

TA貢獻1824條經(jīng)驗 獲得超6個贊

您也需要回顯中間元素,而不僅僅是最后一個



foreach ($data1 as $sourcevalue){

    if (is_array($sourcevalue)) {

        foreach ($sourcevalue as $value) {

            printData2($value);

        }

    } else {

        printData2($sourcevalue);

    }

}


function printData2($source) {

    foreach ($data2 as $endvalue){

        if (is_array($endvalue)){

            foreach ($endvalue as $value1){

                pr($source, $value1);

            }

        } else  {

            pr($source, $endvalue);

        }

    }

}


function pr($source, $end) {

    echo "{$source} {$end}<br>";

}


查看完整回答
反對 回復(fù) 2023-04-02
?
江戶川亂折騰

TA貢獻1851條經(jīng)驗 獲得超5個贊

數(shù)組 2 中的數(shù)據(jù)在處理過程中永遠(yuǎn)不會改變,因此最好準(zhǔn)備/展平數(shù)據(jù)以避免is_array()在迭代嵌套循環(huán)時進行冗余調(diào)用。


這樣做的一種方法是使用array_merge_recursive()僅訪問葉節(jié)點(不可迭代)并生成一維數(shù)組 ( $flat2)。


另一個好技巧是將元素(無論它們是否可迭代)轉(zhuǎn)換為數(shù)組,而不是在is_array()迭代時進行調(diào)用。$data1如果將不可迭代元素 ( $e) 轉(zhuǎn)換為數(shù)組,它將成為新數(shù)組中的唯一值。換句話說,$e變成了[$e]。


這兩個步驟對清理代碼大有幫助。


在我下面的代碼片段中,使用兩個 foreach 循環(huán)遍歷$data1,然后使用第三個循環(huán)迭代$flat2,最后使用printf()干凈地格式化和輸出數(shù)據(jù)。


$data1請注意,我在 Justinas 的回答下根據(jù)您的要求包括了第一級密鑰。


代碼:(演示)


$flat2 = [];

array_walk_recursive($data2, function($v) use(&$flat2) {

    $flat2[] = $v;

});


foreach ($data1 as $k => $e) {

    foreach ((array)$e as $v) {

        foreach ($flat2 as $f) {

            printf("%d: %d %d\n", $k, $v, $f);

        }

    }

}

或者僅使用語言構(gòu)造,您可以對兩個數(shù)組使用相同的數(shù)組轉(zhuǎn)換技術(shù),并將第二組嵌套循環(huán)嵌套在第一組嵌套循環(huán)中。這樣會生成更少的變量,少調(diào)用1次函數(shù),更簡潔。


代碼:(演示)


foreach ($data1 as $k => $e1) {

    foreach ((array)$e1 as $v1) {

        foreach ($data2 as $e2) {

            foreach ((array)$e2 as $v2) {

                printf("%d: %d %d\n", $k, $v1, $v2);

            }

        }

    }

}

輸出:


0: 0 0

0: 0 1

0: 0 5

0: 0 4

0: 0 8

0: 0 0

1: 4 0

1: 4 1

1: 4 5

1: 4 4

1: 4 8

1: 4 0

1: 8 0

1: 8 1

1: 8 5

1: 8 4

1: 8 8

1: 8 0

2: 0 0

2: 0 1

2: 0 5

2: 0 4

2: 0 8

2: 0 0

3: 2 0

3: 2 1

3: 2 5

3: 2 4

3: 2 8

3: 2 0

3: 6 0

3: 6 1

3: 6 5

3: 6 4

3: 6 8

3: 6 0

3: 10 0

3: 10 1

3: 10 5

3: 10 4

3: 10 8

3: 10 0

4: 1 0

4: 1 1

4: 1 5

4: 1 4

4: 1 8

4: 1 0

4: 5 0

4: 5 1

4: 5 5

4: 5 4

4: 5 8

4: 5 0

5: 3 0

5: 3 1

5: 3 5

5: 3 4

5: 3 8

5: 3 0

5: 7 0

5: 7 1

5: 7 5

5: 7 4

5: 7 8

5: 7 0

5: 11 0

5: 11 1

5: 11 5

5: 11 4

5: 11 8

5: 11 0



查看完整回答
反對 回復(fù) 2023-04-02
  • 2 回答
  • 0 關(guān)注
  • 123 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號