亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

在 PHP 中轉換一個 3 維數組

在 PHP 中轉換一個 3 維數組

PHP
慕尼黑8549860 2022-12-23 10:19:25
我有一個這樣的數組:array(3) {    ["FL_1"] => array(3) {        ["MIC_1"] => array(1) {            ["SP_4"] => float(7)        }        ["MIC_13"] => array(1) {            ["SP_16"] => float(4)        }        ["MIC_6"] => array(1) {            ["SP_74"] => float(4)        }    }    ["FL_2"] => array(2) {        ["MIC_1"] => array(1) {            ["SP_5"] => float(4)        }        ["MIC_13"] => array(1) {            ["SP_17"] => float(4)        }        ["MIC_6"] > array(1) {            ["SP_75"] => float(4)        }    }    ["FL_3"] => array(2) {        ["MIC_1"] => array(1) {            ["SP_5"] => float(89)        }        ["MIC_13"] => array(1) {            ["SP_18"] => float(1)        }        ["MIC_6"] > array(1) {            ["SP_78"] => float(21)        }    }}對于每一個FL_X,我只需要保留一個MIC_X滿足以下條件的:1-MIC_X每個都需要相同FL_X2- 這MIC_X需要具有盡可能低的SP_X值從這個例子我需要得到以下數組array(3) {    ["FL_1"] => array(1) {        ["MIC_13"] => array(1) {            ["SP_16"] => float(4)        }    }    ["FL_2"] => array(1) {        ["MIC_13"] => array(1) {            ["SP_17"] => float(6)        }    }    ["FL_3"] => array(1) {        ["MIC_13"] => array(1) {            ["SP_18"] => float(1)        }    }}任何有關如何執行此操作的幫助將不勝感激。
查看完整描述

1 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

這是一種可能的解決方案。它用于array_walk_recursive查找SP_X與最小值關聯的鍵SP_X,然后遍歷數組以查找MIC_X與該鍵和值關聯的SP_X鍵,最后它使用array_mapandarray_filter僅從原始數組中提取那些MIC_X鍵值:

// 找到最小的 SP_X 值和它的鍵

$min_sp = PHP_INT_MAX;

$min_key = '';

array_walk_recursive($array, function ($v, $k) use (&$min_sp, &$min_key) {

    if ($v < $min_sp) {

        $min_sp = $v;

        $min_key = $k;

    } 

});


// find the MIC_X key corresponding to the min SP_X value

$mic_key = '';

foreach ($array as $fl) {

    foreach ($fl as $mic => $sp) {

        if (isset($sp[$min_key]) && $sp[$min_key] == $min_sp) {

            $mic_key = $mic;

            break 2;

        }

    }

}


// filter the array to get all the MIC_X values

$out = array_map(function ($fl) use ($mic_key) {

    return array_filter($fl, function ($mic) use ($mic_key) {

        return $mic == $mic_key;

    }, ARRAY_FILTER_USE_KEY);

}, $array);


print_r($out);

輸出:


Array

(

    [FL_1] => Array

        (

            [MIC_13] => Array

                (

                    [SP_16] => 4

                )

        )

    [FL_2] => Array

        (

            [MIC_13] => Array

                (

                    [SP_17] => 4

                )

        )

    [FL_3] => Array

        (

            [MIC_13] => Array

                (

                    [SP_18] => 1

                )

        )

)

3v4l.org 上的演示


查看完整回答
反對 回復 2022-12-23
  • 1 回答
  • 0 關注
  • 120 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號