簡體   English   中英

如何將多維數組拆分為簡單數組

[英]How to split multidimensional array into simple arrays

我有一個這樣的多維數組 ,它是用戶做出的選擇的列表。 這只是從用戶檢索到的數據的示例。 子陣列的組合可能會根據用戶選擇而有所不同。 類似3個子數組,分別具有元素3、5、2。 並且數組鍵也將需要來自...

array(7) {
    ["resume_residence"]=>
    string(8) "Barbados"
    ["resume_language_fluently"]=>
    string(8) "Mandarin"
    ["resume_language_professional"]=>
    string(7) "Spanish"
    ["resume_language_basic"]=>
    string(8) "Mandarin"
    ["resume_overseas_experience"]=>
    string(2) "No"
    ["resume_degree"]=>     array(2) {
        [0]=>   string(2) "BA"
        [1]=>   string(3) "BFA"
    }
    ["resume_career_employment_status"]=>   array(2) {
        [0]=>   string(8) "Employed"
        [0]=>   string(10) "Unemployed"
    }
}

我想將此數組轉換為多個數組 ,每個數組都具有單個值鍵,例如

array(4){
    array(7) {
        ["resume_residence"]=>    string(8) "Barbados"
        ["resume_language_fluently"]=>    string(8) "Mandarin"
        ["resume_language_professional"]=>    string(7) "Spanish"
        ["resume_language_basic"]=>    string(8) "Mandarin"
        ["resume_overseas_experience"]=>    string(2) "No"
        ["resume_degree"]=> string(2) "BA"
        ["resume_career_employment_status"]=> string(2) "Employed"
    },
    array(7) {
        ["resume_residence"]=>    string(8) "Barbados"
        ["resume_language_fluently"]=>    string(8) "Mandarin"
        ["resume_language_professional"]=>    string(7) "Spanish"
        ["resume_language_basic"]=>    string(8) "Mandarin"
        ["resume_overseas_experience"]=>    string(2) "No"
        ["resume_degree"]=> string(2) "BA"
        ["resume_career_employment_status"]=> string(2) "Unemployed"
    },
    array(7) {
        ["resume_residence"]=>    string(8) "Barbados"
        ["resume_language_fluently"]=>    string(8) "Mandarin"
        ["resume_language_professional"]=>    string(7) "Spanish"
        ["resume_language_basic"]=>    string(8) "Mandarin"
        ["resume_overseas_experience"]=>    string(2) "No"
        ["resume_degree"]=> string(2) "BFA"
        ["resume_career_employment_status"]=> string(2) "Employed"
    },
    array(7) {
        ["resume_residence"]=>    string(8) "Barbados"
        ["resume_language_fluently"]=>    string(8) "Mandarin"
        ["resume_language_professional"]=>    string(7) "Spanish"
        ["resume_language_basic"]=>    string(8) "Mandarin"
        ["resume_overseas_experience"]=>    string(2) "No"
        ["resume_degree"]=> string(2) "BFA"
        ["resume_career_employment_status"]=> string(2) "Unemployed"
    }
}

請幫助我如何將數組拆分為多個數組,如上面的一個..

您似乎想生成分配給輸入中不同鍵的數組值的所有可能組合。

您可以通過遞歸來做到這一點:

$array = [
    "resume_residence"=> "Barbados",
    "resume_language_fluently"=> "Mandarin",
    "resume_language_professional"=> "Spanish",
    "resume_language_basic"=> "Mandarin",
    "resume_overseas_experience"=> "No",
    "resume_degree"=> ["BA", "FBA"],
    "resume_career_employment_status"=> ["Employed", "Unemployed"]
];

function expandArrays(&$array) { // Argument by reference
    // Get current key and value based on the array pointer
    $key = key($array);
    $value = current($array);
    // Get results for any further key/values through recursion:
    $results = next($array) ? expandArrays($array) : [$array];
    // Nothing changes if the current value is not an array
    if (!is_array($value)) return $results;
    // It is an array, so produce all combinations of the partial results with each value
    foreach($value as $v) {
        foreach($results as $r) {
            $r[$key] = $v;
            $newResults[] = $r;
        }
    }
    // ... and return that as a result
    return $newResults;
}

$results = expandArrays($array);

print_r($results);

輸出:

Array (
    [0] => Array (
        [resume_residence] => Barbados
        [resume_language_fluently] => Mandarin
        [resume_language_professional] => Spanish
        [resume_language_basic] => Mandarin
        [resume_overseas_experience] => No
        [resume_degree] => BA
        [resume_career_employment_status] => Employed
    )
    [1] => Array (
        [resume_residence] => Barbados
        [resume_language_fluently] => Mandarin
        [resume_language_professional] => Spanish
        [resume_language_basic] => Mandarin
        [resume_overseas_experience] => No
        [resume_degree] => BA
        [resume_career_employment_status] => Unemployed
    )
    [2] => Array (
        [resume_residence] => Barbados
        [resume_language_fluently] => Mandarin
        [resume_language_professional] => Spanish
        [resume_language_basic] => Mandarin
        [resume_overseas_experience] => No
        [resume_degree] => FBA
        [resume_career_employment_status] => Employed
    )
    [3] => Array (
        [resume_residence] => Barbados
        [resume_language_fluently] => Mandarin
        [resume_language_professional] => Spanish
        [resume_language_basic] => Mandarin
        [resume_overseas_experience] => No
        [resume_degree] => FBA
        [resume_career_employment_status] => Unemployed
    )
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM