【问题标题】:Convert Associative array from one form to other将关联数组从一种形式转换为另一种形式
【发布时间】:2015-05-11 14:33:54
【问题描述】:

我有一个这样的数组..

array(26053) {
  [0]=>
    array(1) {
      ["New York"]=>
      array(10) {
        ["state"]=>
        string(8) "New York"
        ["state_code"]=>
        string(0) ""
        ["country_code"]=>
        string(1) "1"
        ["country"]=>
        string(24) "United States Of America"
        ["lat"]=>
        string(0) ""
        ["long"]=>
        string(0) ""
        ["city_id"]=>
        string(5) "70834"
        ["country_id"]=>
        string(4) "6532"
        ["country_iso"]=>
        string(2) "US"
        ["orignal_name"]=>
        string(1) ""
    }
}

  [1]=>
  array(1) {
    ["Mexico, Ciudad De"]=>
    array(10) {
      ["state"]=>
      string(0) ""
      ["state_code"]=>
      string(0) ""
      ["country_code"]=>
      string(2) "52"
      ["country"]=>
      string(6) "Mexico"
      ["lat"]=>
      string(0) ""
      ["long"]=>
      string(0) ""
      ["city_id"]=>
      string(5) "72329"
      ["country_id"]=>
      string(0) ""
      ["country_iso"]=>
      string(2) "MX"
      ["orignal_name"]=>
      string(1) ""
    }...

同样明智

为了创建上面的数组,我这样做了

$filename="city.dat";       
$lines=file($filename);                                              
$city_array = array();               

foreach ($lines as $line_num => $value) {
    $tmp_arry = array();                                           
    $parts = explode("\t", $value); 
    $tmp_arry[$parts[0]] = array();
    $tmp_arry[$parts[0]]['state'] = $parts[1];    
    $tmp_arry[$parts[0]]['orignal_name'] = $parts[11];    
    array_push($city_array, $tmp_arry);
}

有什么方法可以将其转换为以下格式,因为 city.data 文件中的数据很大,因此我更容易以这种格式进行搜索

array(26053){
    ["New York"]=>.......
    ["Mexico"] => ...... }

感谢您的帮助

【问题讨论】:

  • 试试$city_array = array_merge($city_array, $tmp_arry); 而不是array_push($city_array, $tmp_arry);
  • array_merge 有不同的功能。!
  • 什么意思?不行吗?
  • 它给了我空数组array (0) {}
  • 看来您只是将array_push() 替换为array_merge() 而不是复制我的代码。

标签: php arrays associative-array


【解决方案1】:

是的,您完全可以这样做(只要城市名称是 valid keys

$filename="city.dat";       
$lines=file($filename);                                              
$city_array = array();               

foreach ($lines as $line_num => $value) {
    $parts = explode("\t", $value); 
    $city_array[$parts[0]]['state'] = $parts[1];    
    // other mapping goes here
    $city_array[$parts[0]]['orignal_name'] = $parts[11];   
}

另一种更简单的方法是,使用映射和combine 分解值

$map = [
'city_name',
'state',
// .. 
'original_name' 
];

foreach ($lines as $line_num => $value) {
    $parts = explode("\t", $value); 
    $values = array_combine($map, $parts);
    $city_array[$parts[0]] = $values;
}

希望这会有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    相关资源
    最近更新 更多