【问题标题】:Flattening an array so first item is key展平数组,因此第一项是关键
【发布时间】:2025-11-29 20:45:01
【问题描述】:

有没有办法把这个数组展平:

Array ( 
    [0] => Array ( 
        [country_code] => IM 
        [language_code] => GB 
    ) 
    [1] => Array ( 
        [country_code] => GG 
        [language_code] => JE 
    ) 
    [2] => Array ( 
        [country_code] => US 
        [language_code] => US 
    ) 
) 

到这里:

array (
    "IM" => "GB"
    "GG" => "JE"
    "US" => "US"
) 

我需要将每个项中的第一项作为键,将第二项作为值。

更新

是否可以使用 secon 概念拥有多个值。如果我有这个数组:

Array ( [0] => Array ( [country_code_two] => GBR [country_code_three] => GB [language_code] => EN ) ) 

并想创建以下内容:

array (
    [GBR] => array ([0] => "GB", [1] => "EN")   
)

这怎么可能?我目前正在使用您的第二个选项,因为我没有 5.5

【问题讨论】:

    标签: php arrays flatten


    【解决方案1】:

    如果您使用的是 PHP 5.5,您可以这样做:(Docs)

    $result = array_column($source, "language_code", "country_code");
    

    如果你没有使用 PHP 5.5,那么你应该是 :p

    更严重的是,向后兼容的版本:

    $keys = array_map(function($a) {return $a['country_code'];},$source);
    $vals = array_map(function($a) {return $a['language_code'];},$source);
    $result = array_combine($keys,$vals);
    

    如果您不知何故陷入了真正旧版本的 PHP,“传统”:

    $result = array();
    foreach($source as $a) {
        $result[$a['country_code']] = $a['language_code'];
    }
    

    【讨论】:

    • 第二种方式,是否可以在两个item的key里面创建一个数组?
    • 抱歉,我已添加到问题中,希望有助于更好地解释。
    • 在这种情况下是的,只要return你想要的数组。
    • $keys = array_map(function($a) {return $a['country_code_two'];},$codes); $vals = array_map(function($a, $b) {return $a['country_code_three']; $a['language_code'];},$codes); $result = array_combine($keys,$vals);
    • return array($a['country_code_three'],$a['language_code']);