aira-virtual / countries
PHP 国家和货币
Requires
- php: >=7.0
- colinodell/json5: ^1.0|^2.0
- nette/caching: ^2.5|^3.0
- pragmarx/coollection: >=0.5
- psr/simple-cache: ^1.0
Requires (Dev)
- gasparesganga/php-shapefile: ^2.4
- phpunit/phpunit: ~6.0|~7.0|~8.0
- squizlabs/php_codesniffer: ^2.3
This package is not auto-updated.
Last update: 2024-09-24 09:33:33 UTC
README
国家
它能给你什么?
这个包包含了有关国家的各种信息
info | items |
---|---|
税收 | 32 |
几何地图 | 248 |
拓扑地图 | 248 |
货币 | 256 |
国家 | 266 |
时区 | 423 |
边界 | 649 |
国旗 | 1,570 |
州 | 4,526 |
城市 | 7,376 |
时区时间 | 81,153 |
地质和拓扑地图
在众多其他信息中,您还可以绘制国家地图
要求
- PHP 7.0+
安装
使用 Composer 安装它
composer require pragmarx/countries
实例化
use PragmaRX\Countries\Package\Countries;
echo $countries->where('cca2', 'IT')->first()->hydrateCurrencies()->currencies->EUR->coins->frequent->first();
// or calling it statically
echo $countries->where('cca2', 'IT')->first()->hydrateCurrencies()->currencies->EUR->coins->frequent->first();
应同时返回
€1
覆盖默认配置
use PragmaRX\Countries\Package\Services\Config;
$countries = new Countries(new Config([
'hydrate' => [
'elements' => [
'currencies' => true,
'flag' => true,
'timezones' => true,
],
],
]));
使用
此包在其核心中包含 Laravel Collections,Collections 中的所有方法都可用,这样您就可以执行过滤、映射、归约、搜索、排序、拒绝等操作。它实际上使用了 Coollection,这是一个具有流畅语法的 Laravel Collections,使我们能够将数组键(和值)作为对象属性访问。
要获取数据库中的所有国家,只需
use PragmaRX\Countries\Package\Countries;
$countries = new Countries();
$all = $countries->all();
要获取 JSON,您
return $countries->toJson();
通过键和值过滤
$countries->where('name.common', 'Brazil')
可以通过其通用名称找到巴西,这是一个
#items: array:22 [▼
"name" => array:3 [▼
"common" => "Brazil"
"official" => "Federative Republic of Brazil"
"native" => array:1 [▼
"por" => array:2 [▼
"official" => "República Federativa do Brasil"
"common" => "Brasil"
]
]
]
或者您也可以这样过滤
$countries->whereNameCommon('Brazil')
并且,您可以进一步深入
$countries->where('name.native.por.common', 'Brasil')
或者通过国家顶级域名搜索
$countries->where('tld.0', '.ch')
要获取
"name" => array:3 [▼
"common" => "Switzerland"
"official" => "Swiss Confederation"
"native" => array:4 [▶]
]
"tld" => array:1 [▼
0 => ".ch"
]
并使用像 pluck 这样的东西
$countries->where('cca3', 'USA')->first()->hydrateStates()->states->pluck('name', 'postal')
要获取
"MA" => "Massachusetts"
"MN" => "Minnesota"
"MT" => "Montana"
"ND" => "North Dakota"
...
该包使用了一个修改后的 Collection,允许您将属性和方法作为对象访问
$countries->where('cca3', 'FRA')
->first()
->borders
->first()
->name
->official
应给出
Principality of Andorra
默认禁用边界水合,但您可以通过调用 hydrate 方法轻松地使边界水合
$countries->where('name.common', 'United Kingdom')
->hydrate('borders')
->first()
->borders
->reverse()
->first()
->name
->common
应返回
Ireland
水合
为了提高性能,默认启用的水合可以在大多数国家属性上禁用,这就是您手动水合属性的方法
$countries->where('name.common', 'United States')->first()->hydrate('timezones')->timezones->first()->zone_name,
$countries->where('name.common', 'United States')->first()->hydrate('timezones')->timezones->first()->zone_name,
以下是一些可水合的属性
- 边界
- 城市
- 货币
- 国旗
- 几何
- 语言
- 州
- 税收
- 时区
- 拓扑
额外的 WHERE 规则
一些属性存储方式不同,因此我们需要特殊规则来访问它们,这些属性是
ISO639_3
=> 3个字母的语言代码。ISO4217
=> 3个字母的货币代码。
当然,您可以通过其他属性访问它们
$countries->whereISO639_3('por')->count()
$countries->where('ISO639_3', 'por')->count()
映射
有时您希望通过不同的名称访问属性,这可以在设置中完成,这样
'maps' => [
'lca3' => 'ISO639_3'
]
在这里,我们将 ISO 格式的语言 3 位短代码与 lca3
绑定,它是 language code alpha 3-letter
的缩写。现在我们可以通过以下方式访问属性
$countries->whereLca3('por')
或者
$countries->where('lca3', 'por')
以下是一些来自 Laravel News 和其他贡献者的示例
使用代码生成所有国家的列表,使用本地名称和常用名称
app(PragmaRX\Countries\Package\Countries::class)
->all()
->map(function ($country) {
$commonName = $country->name->common;
$languages = $country->languages ?? collect();
$language = $languages->keys()->first() ?? null;
$nativeNames = $country->name->native ?? null;
if (
filled($language) &&
filled($nativeNames) &&
filled($nativeNames[$language]) ?? null
) {
$native = $nativeNames[$language]['common'] ?? null;
}
if (blank($native ?? null) && filled($nativeNames)) {
$native = $nativeNames->first()['common'] ?? null;
}
$native = $native ?? $commonName;
if ($native !== $commonName && filled($native)) {
$native = "$native ($commonName)";
}
return [$country->cca2 => $native];
})
->values()
->toArray();
应给出 267 个(或更多)国家,如下所示
"AW" => "Aruba"
"AF" => "افغانستان (Afghanistan)"
"AO" => "Angola"
"AI" => "Anguilla"
"AX" => "Åland (Åland Islands)"
"AL" => "Shqipëria (Albania)"
"AD" => "Andorra"
"AE" => "دولة الإمارات العربية المتحدة (United Arab Emirates)"
"AR" => "Argentina"
"AM" => "Հայաստան (Armenia)"
"AS" => "American Samoa"
"AQ" => "Antarctica"
"TF" => "Terres australes et antarctiques françaises (French Southern and Antarctic Lands)"
"AG" => "Antigua and Barbuda"
"AU" => "Australia"
"AT" => "Österreich (Austria)"
"AZ" => "Azərbaycan (Azerbaijan)"
"BI" => "Burundi"
"BE" => "Belgien (Belgium)"
"BJ" => "Bénin (Benin)"
"BF" => "Burkina Faso"
"BD" => "বাংলাদেশ (Bangladesh)"
"BG" => "България (Bulgaria)"
"BH" => "البحرين (Bahrain)"
"BS" => "Bahamas"
"BA" => "Bosna i Hercegovina (Bosnia and Herzegovina)"
"BL" => "Saint-Barthélemy (Saint Barthélemy)"
"SH" => "Saint Helena, Ascension and Tristan da Cunha"
"BY" => "Белару́сь (Belarus)"
"BZ" => "Belize"
"BM" => "Bermuda"
"BO" => "Wuliwya (Bolivia)"
"BQ" => "Caribisch Nederland (Caribbean Netherlands)"
"BR" => "Brasil (Brazil)"
"BB" => "Barbados"
"BN" => "Negara Brunei Darussalam (Brunei)"
"BT" => "འབྲུག་ཡུལ་ (Bhutan)"
"BV" => "Bouvetøya (Bouvet Island)"
"BW" => "Botswana"
"CF" => "République centrafricaine (Central African Republic)"
"CA" => "Canada"
"CC" => "Cocos (Keeling) Islands"
"CH" => "Suisse (Switzerland)"
"CL" => "Chile"
"CN" => "中国 (China)"
"CI" => "Côte d'Ivoire (Ivory Coast)"
"CM" => "Cameroon"
"CD" => "RD Congo (DR Congo)"
"CG" => "République du Congo (Republic of the Congo)"
"CK" => "Cook Islands"
"CO" => "Colombia"
"KM" => "القمر (Comoros)"
"CV" => "Cabo Verde (Cape Verde)"
...
生成国家列表
$countries->all()->pluck('name.common');
返回
[
"Aruba",
"Afghanistan",
"Angola",
"Anguilla",
"Åland Islands",
....
生成货币列表
$countries->all()->pluck('currencies');
返回
$countries->all()->pluck('currencies')
获取货币符号
$countries->where('name.common', 'Brazil')->first()->hydrate('currency')->currencies->BRL->units->major->symbol
生成州列表
$countries->where('name.common', 'United States')
->first()
->hydrateStates()
->states
->sortBy('name')
->pluck('name', 'postal')
返回
[
"AL": "Alabama",
"AK": "Alaska",
"AZ": "Arizona",
"AR": "Arkansas",
"CA": "California",
....
....
水合并获取城市
$countries->where('cca3', 'FRA')
->first()
->hydrate('cities')
->cities
->paris
->timezone
应返回
Europe/Paris
获取国家的货币
$countries->where('name.common', 'United States')->first()->currency;
返回
[{
"alternativeSigns": [],
"ISO4217Code": "USD",
"ISO4217Number": "840",
"sign": "$",
"subunits": 100,
"title": "U.S. dollar",
....
获取所有货币
$countries->currencies()
返回
[
0 => "AED"
1 => "AFN"
2 => "ALL"
3 => "AMD"
4 => "ANG"
5 => "AOA"
6 => "ARS"
7 => "AUD"
8 => "AWG"
9 => "AZN"
10 => "BAM"
....
获取州的时区
return $countries->where('name.common', 'United States')->first()->timezone->NC;
返回
America/New_York
获取国家的所有时区
$countries->where('name.common', 'Brazil')
->first()
->hydrateTimezones()
->timezones
->map(function ($timezone) {
return $timezone->zone_name;
})->values()
->unique()
->toArray()
获取时区的所有时间
return $countries->where('name.common', 'United States Virgin Islands')->first()->hydrate('timezones_times')->timezones->first()->times;
返回
"times" => [
"abbreviation" => "LMT"
"dst" => "0"
"gmt_offset" => "-14764"
"time_start" => "-1825098837"
"zone_id" => "415"
1 => [
"abbreviation" => "AST"
"dst" => "0"
"gmt_offset" => "-14400"
"time_start" => "-1825098836"
"zone_id" => "415"
]
]
国旗
Countries 提供了许多不同的国旗来源,包括 SVG 国旗。这是您如何使用其中一个可用来源的方法
安装 flag-icon
npm install --save-dev flag-icon-css
将其导入到您的项目中
@import '~flag-icon-css/sass/flag-icon.scss';
使用国家来获取旗帜的span
$unitedStatesFlag =
$this->countries->where('cca3', 'USA')
->first()
->flag
->flag_icon;
在您的blade模板中渲染它
{!! $unitedStatesFlag !!}
发布资源
您可以通过以下方式发布配置
php artisan vendor:publish --provider=PragmaRX\\Countries\\ServiceProvider
数据
此软件包使用一些其他开源软件包,直到我们构建更好的文档,您可以在mledoze/countries上找到有关数据的更多信息,以及如何在Laravel News文章中使用它。
缓存
由于这些数据不应更改,调用会自动缓存。如果您想更改此行为,一旦发布,可以编辑config/countries.php
文件。
框架桥接
示例文件
- sample-partial.json:没有边界的国家示例。
- sample-full.json:完整填充的国家示例。
作者
版权
为了构建国家数据库和关系,此软件包使用以下资源和软件包
许可证
Countries遵循BSD 3-Clause许可证 - 有关详细信息,请参阅LICENSE
文件
贡献
欢迎提交拉取请求和问题。