将关联数组从一种形式转换为另一种形式
Convert Associative array from one form to other
我有一个这样的数组..
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"] => ...... }
感谢您的帮助
是的,你完全可以做到(只要城市名称是 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;
}
希望这对您有所帮助
我有一个这样的数组..
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"] => ...... }
感谢您的帮助
是的,你完全可以做到(只要城市名称是 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;
}
希望这对您有所帮助