【问题标题】:Convert PHP multidimensional array so that the values become keys, and and other values become arrays for each key转换PHP多维数组,使值成为键,其他值成为每个键的数组
【发布时间】:2020-02-21 06:08:48
【问题描述】:

我有:

    ['countryCode' => 11, 'postalCode' => 12345],
    ['countryCode' => 11, 'postalCode' => 12346],
    ['countryCode' => 11, 'postalCode' => 12347],
    ['countryCode' => 11, 'postalCode' => 12348],
    ['countryCode' => 11, 'postalCode' => 12349],
    ['countryCode' => 12, 'postalCode' => 12345],
    ['countryCode' => 12, 'postalCode' => 12346],
    ['countryCode' => 12, 'postalCode' => 12347],
    ['countryCode' => 12, 'postalCode' => 12348],
    ['countryCode' => 12, 'postalCode' => 12349],
];

但我想要:

    '11' => ['12345, 12346, 12347, 12348, 12349'], '12' => ['12345, 12346, 12347, 12348, 12349']
];

我试过了:

$countries = array_column($data, 'countryCode');
$countries = array_unique($countries);
$countries = array_fill_keys($countries, []);

function makeArrays(&$countries, $data){
    foreach ($countries as $countryId => $postalCodes){
        foreach ($data as $item) {
            if ($item['countryCode'] == $countryId) {
                array_push($postalCodes, $item['postalCode']);
            }
        }
    }
    return $countries;
}

makeArrays($countries, $data);

但是,当我 var_dump makeArrays 函数时,国家 ID 键没有像我期望的那样填充有邮政编码数组:

array(2) {
  [11]=>
  array(0) {
  }
  [12]=>
  array(0) {
  }
}

如何让每个键的数组填充预期值?

【问题讨论】:

    标签: php arrays multidimensional-array pass-by-reference array-unique


    【解决方案1】:

    您可以遍历数组并将值设置为键。

        $arr = [
        ['countryCode' => 11, 'postalCode' => 12345],
        ['countryCode' => 11, 'postalCode' => 12346],
        ['countryCode' => 11, 'postalCode' => 12347],
        ['countryCode' => 11, 'postalCode' => 12348],
        ['countryCode' => 11, 'postalCode' => 12349],
        ['countryCode' => 12, 'postalCode' => 12345],
        ['countryCode' => 12, 'postalCode' => 12346],
        ['countryCode' => 12, 'postalCode' => 12347],
        ['countryCode' => 12, 'postalCode' => 12348],
        ['countryCode' => 12, 'postalCode' => 12349],
    ]; 
    
    //
    $newArr = [];
    foreach ($arr as $key => $val) {
        $newArr[$val['countryCode']][] = $val['postalCode'];
    }
    print_r($newArr);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多