Last active
May 17, 2024 21:53
-
-
Save tomcorbett/8a914e36be6b77eb5ae1df9fc62d22b8 to your computer and use it in GitHub Desktop.
Simple converter with hardcoded values for converting prices based on pricing parity data from ourworld in data
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /** | |
| * Using data from 2021 (latest) from here: https://ourworldindata.org/grapher/gdp-price-levels-relative-to-the-us?tab=table&time=latest | |
| */ | |
| class PricingParityConverter | |
| { | |
| const COUNTRY_MAP = [ | |
| 'AF' => ['name' => 'Afghanistan', 'code3' => 'AFG'], | |
| 'AL' => ['name' => 'Albania', 'code3' => 'ALB'], | |
| 'DZ' => ['name' => 'Algeria', 'code3' => 'DZA'], | |
| 'AO' => ['name' => 'Angola', 'code3' => 'AGO'], | |
| 'AG' => ['name' => 'Antigua and Barbuda', 'code3' => 'ATG'], | |
| 'AR' => ['name' => 'Argentina', 'code3' => 'ARG'], | |
| 'AM' => ['name' => 'Armenia', 'code3' => 'ARM'], | |
| 'AW' => ['name' => 'Aruba', 'code3' => 'ABW'], | |
| 'AU' => ['name' => 'Australia', 'code3' => 'AUS'], | |
| 'AT' => ['name' => 'Austria', 'code3' => 'AUT'], | |
| 'AZ' => ['name' => 'Azerbaijan', 'code3' => 'AZE'], | |
| 'BS' => ['name' => 'Bahamas', 'code3' => 'BHS'], | |
| 'BH' => ['name' => 'Bahrain', 'code3' => 'BHR'], | |
| 'BD' => ['name' => 'Bangladesh', 'code3' => 'BGD'], | |
| 'BB' => ['name' => 'Barbados', 'code3' => 'BRB'], | |
| 'BY' => ['name' => 'Belarus', 'code3' => 'BLR'], | |
| 'BE' => ['name' => 'Belgium', 'code3' => 'BEL'], | |
| 'BZ' => ['name' => 'Belize', 'code3' => 'BLZ'], | |
| 'BJ' => ['name' => 'Benin', 'code3' => 'BEN'], | |
| 'BM' => ['name' => 'Bermuda', 'code3' => 'BMU'], | |
| 'BT' => ['name' => 'Bhutan', 'code3' => 'BTN'], | |
| 'BO' => ['name' => 'Bolivia', 'code3' => 'BOL'], | |
| 'BA' => ['name' => 'Bosnia and Herzegovina', 'code3' => 'BIH'], | |
| 'BW' => ['name' => 'Botswana', 'code3' => 'BWA'], | |
| 'BR' => ['name' => 'Brazil', 'code3' => 'BRA'], | |
| 'BN' => ['name' => 'Brunei Darussalam', 'code3' => 'BRN'], | |
| 'BG' => ['name' => 'Bulgaria', 'code3' => 'BGR'], | |
| 'BF' => ['name' => 'Burkina Faso', 'code3' => 'BFA'], | |
| 'BI' => ['name' => 'Burundi', 'code3' => 'BDI'], | |
| 'KH' => ['name' => 'Cambodia', 'code3' => 'KHM'], | |
| 'CM' => ['name' => 'Cameroon', 'code3' => 'CMR'], | |
| 'CA' => ['name' => 'Canada', 'code3' => 'CAN'], | |
| 'CV' => ['name' => 'Cape Verde', 'code3' => 'CPV'], | |
| 'KY' => ['name' => 'Cayman Islands', 'code3' => 'CYM'], | |
| 'CF' => ['name' => 'Central African Republic', 'code3' => 'CAF'], | |
| 'TD' => ['name' => 'Chad', 'code3' => 'TCD'], | |
| 'CL' => ['name' => 'Chile', 'code3' => 'CHL'], | |
| 'CN' => ['name' => 'China', 'code3' => 'CHN'], | |
| 'CO' => ['name' => 'Colombia', 'code3' => 'COL'], | |
| 'KM' => ['name' => 'Comoros', 'code3' => 'COM'], | |
| 'CG' => ['name' => 'Congo', 'code3' => 'COG'], | |
| 'CR' => ['name' => 'Costa Rica', 'code3' => 'CRI'], | |
| 'CI' => ['name' => "Côte d'Ivoire", 'code3' => 'CIV'], | |
| 'HR' => ['name' => 'Croatia', 'code3' => 'HRV'], | |
| 'CU' => ['name' => 'Cuba', 'code3' => 'CUB'], | |
| 'CW' => ['name' => 'Curaçao', 'code3' => 'CUW'], | |
| 'CY' => ['name' => 'Cyprus', 'code3' => 'CYP'], | |
| 'CZ' => ['name' => 'Czechia', 'code3' => 'CZE'], | |
| 'CD' => ['name' => 'Democratic Republic of the Congo', 'code3' => 'COD'], | |
| 'DK' => ['name' => 'Denmark', 'code3' => 'DNK'], | |
| 'DJ' => ['name' => 'Djibouti', 'code3' => 'DJI'], | |
| 'DM' => ['name' => 'Dominica', 'code3' => 'DMA'], | |
| 'DO' => ['name' => 'Dominican Republic', 'code3' => 'DOM'], | |
| 'EC' => ['name' => 'Ecuador', 'code3' => 'ECU'], | |
| 'EG' => ['name' => 'Egypt', 'code3' => 'EGY'], | |
| 'SV' => ['name' => 'El Salvador', 'code3' => 'SLV'], | |
| 'GQ' => ['name' => 'Equatorial Guinea', 'code3' => 'GNQ'], | |
| 'ER' => ['name' => 'Eritrea', 'code3' => 'ERI'], | |
| 'EE' => ['name' => 'Estonia', 'code3' => 'EST'], | |
| 'SZ' => ['name' => 'Eswatini', 'code3' => 'SWZ'], | |
| 'ET' => ['name' => 'Ethiopia', 'code3' => 'ETH'], | |
| 'FJ' => ['name' => 'Fiji', 'code3' => 'FJI'], | |
| 'FI' => ['name' => 'Finland', 'code3' => 'FIN'], | |
| 'FR' => ['name' => 'France', 'code3' => 'FRA'], | |
| 'GA' => ['name' => 'Gabon', 'code3' => 'GAB'], | |
| 'GM' => ['name' => 'Gambia', 'code3' => 'GMB'], | |
| 'GE' => ['name' => 'Georgia', 'code3' => 'GEO'], | |
| 'DE' => ['name' => 'Germany', 'code3' => 'DEU'], | |
| 'GH' => ['name' => 'Ghana', 'code3' => 'GHA'], | |
| 'GR' => ['name' => 'Greece', 'code3' => 'GRC'], | |
| 'GD' => ['name' => 'Grenada', 'code3' => 'GRD'], | |
| 'GT' => ['name' => 'Guatemala', 'code3' => 'GTM'], | |
| 'GN' => ['name' => 'Guinea', 'code3' => 'GIN'], | |
| 'GW' => ['name' => 'Guinea-Bissau', 'code3' => 'GNB'], | |
| 'GY' => ['name' => 'Guyana', 'code3' => 'GUY'], | |
| 'HT' => ['name' => 'Haiti', 'code3' => 'HTI'], | |
| 'HN' => ['name' => 'Honduras', 'code3' => 'HND'], | |
| 'HK' => ['name' => 'Hong Kong', 'code3' => 'HKG'], | |
| 'HU' => ['name' => 'Hungary', 'code3' => 'HUN'], | |
| 'IS' => ['name' => 'Iceland', 'code3' => 'ISL'], | |
| 'IN' => ['name' => 'India', 'code3' => 'IND'], | |
| 'ID' => ['name' => 'Indonesia', 'code3' => 'IDN'], | |
| 'IR' => ['name' => 'Iran', 'code3' => 'IRN'], | |
| 'IQ' => ['name' => 'Iraq', 'code3' => 'IRQ'], | |
| 'IE' => ['name' => 'Ireland', 'code3' => 'IRL'], | |
| 'IL' => ['name' => 'Israel', 'code3' => 'ISR'], | |
| 'IT' => ['name' => 'Italy', 'code3' => 'ITA'], | |
| 'JM' => ['name' => 'Jamaica', 'code3' => 'JAM'], | |
| 'JP' => ['name' => 'Japan', 'code3' => 'JPN'], | |
| 'JO' => ['name' => 'Jordan', 'code3' => 'JOR'], | |
| 'KZ' => ['name' => 'Kazakhstan', 'code3' => 'KAZ'], | |
| 'KE' => ['name' => 'Kenya', 'code3' => 'KEN'], | |
| 'KI' => ['name' => 'Kiribati', 'code3' => 'KIR'], | |
| 'XK' => ['name' => 'Kosovo', 'code3' => 'XKX'], | |
| 'KW' => ['name' => 'Kuwait', 'code3' => 'KWT'], | |
| 'KG' => ['name' => 'Kyrgyzstan', 'code3' => 'KGZ'], | |
| 'LA' => ['name' => 'Laos', 'code3' => 'LAO'], | |
| 'LV' => ['name' => 'Latvia', 'code3' => 'LVA'], | |
| 'LB' => ['name' => 'Lebanon', 'code3' => 'LBN'], | |
| 'LS' => ['name' => 'Lesotho', 'code3' => 'LSO'], | |
| 'LR' => ['name' => 'Liberia', 'code3' => 'LBR'], | |
| 'LY' => ['name' => 'Libya', 'code3' => 'LBY'], | |
| 'LT' => ['name' => 'Lithuania', 'code3' => 'LTU'], | |
| 'LU' => ['name' => 'Luxembourg', 'code3' => 'LUX'], | |
| 'MO' => ['name' => 'Macao', 'code3' => 'MAC'], | |
| 'MG' => ['name' => 'Madagascar', 'code3' => 'MDG'], | |
| 'MW' => ['name' => 'Malawi', 'code3' => 'MWI'], | |
| 'MY' => ['name' => 'Malaysia', 'code3' => 'MYS'], | |
| 'MV' => ['name' => 'Maldives', 'code3' => 'MDV'], | |
| 'ML' => ['name' => 'Mali', 'code3' => 'MLI'], | |
| 'MT' => ['name' => 'Malta', 'code3' => 'MLT'], | |
| 'MH' => ['name' => 'Marshall Islands', 'code3' => 'MHL'], | |
| 'MR' => ['name' => 'Mauritania', 'code3' => 'MRT'], | |
| 'MU' => ['name' => 'Mauritius', 'code3' => 'MUS'], | |
| 'MX' => ['name' => 'Mexico', 'code3' => 'MEX'], | |
| 'FM' => ['name' => 'Micronesia', 'code3' => 'FSM'], | |
| 'MD' => ['name' => 'Moldova', 'code3' => 'MDA'], | |
| 'MN' => ['name' => 'Mongolia', 'code3' => 'MNG'], | |
| 'ME' => ['name' => 'Montenegro', 'code3' => 'MNE'], | |
| 'MA' => ['name' => 'Morocco', 'code3' => 'MAR'], | |
| 'MZ' => ['name' => 'Mozambique', 'code3' => 'MOZ'], | |
| 'MM' => ['name' => 'Myanmar', 'code3' => 'MMR'], | |
| 'NA' => ['name' => 'Namibia', 'code3' => 'NAM'], | |
| 'NR' => ['name' => 'Nauru', 'code3' => 'NRU'], | |
| 'NP' => ['name' => 'Nepal', 'code3' => 'NPL'], | |
| 'NL' => ['name' => 'Netherlands', 'code3' => 'NLD'], | |
| 'NZ' => ['name' => 'New Zealand', 'code3' => 'NZL'], | |
| 'NI' => ['name' => 'Nicaragua', 'code3' => 'NIC'], | |
| 'NE' => ['name' => 'Niger', 'code3' => 'NER'], | |
| 'NG' => ['name' => 'Nigeria', 'code3' => 'NGA'], | |
| 'MK' => ['name' => 'North Macedonia', 'code3' => 'MKD'], | |
| 'NO' => ['name' => 'Norway', 'code3' => 'NOR'], | |
| 'OM' => ['name' => 'Oman', 'code3' => 'OMN'], | |
| 'PK' => ['name' => 'Pakistan', 'code3' => 'PAK'], | |
| 'PW' => ['name' => 'Palau', 'code3' => 'PLW'], | |
| 'PS' => ['name' => 'Palestine', 'code3' => 'PSE'], | |
| 'PA' => ['name' => 'Panama', 'code3' => 'PAN'], | |
| 'PG' => ['name' => 'Papua New Guinea', 'code3' => 'PNG'], | |
| 'PY' => ['name' => 'Paraguay', 'code3' => 'PRY'], | |
| 'PE' => ['name' => 'Peru', 'code3' => 'PER'], | |
| 'PH' => ['name' => 'Philippines', 'code3' => 'PHL'], | |
| 'PL' => ['name' => 'Poland', 'code3' => 'POL'], | |
| 'PT' => ['name' => 'Portugal', 'code3' => 'PRT'], | |
| 'PR' => ['name' => 'Puerto Rico', 'code3' => 'PRI'], | |
| 'QA' => ['name' => 'Qatar', 'code3' => 'QAT'], | |
| 'RO' => ['name' => 'Romania', 'code3' => 'ROU'], | |
| 'RU' => ['name' => 'Russia', 'code3' => 'RUS'], | |
| 'RW' => ['name' => 'Rwanda', 'code3' => 'RWA'], | |
| 'KN' => ['name' => 'Saint Kitts and Nevis', 'code3' => 'KNA'], | |
| 'LC' => ['name' => 'Saint Lucia', 'code3' => 'LCA'], | |
| 'VC' => ['name' => 'Saint Vincent and the Grenadines', 'code3' => 'VCT'], | |
| 'WS' => ['name' => 'Samoa', 'code3' => 'WSM'], | |
| 'SM' => ['name' => 'San Marino', 'code3' => 'SMR'], | |
| 'ST' => ['name' => 'Sao Tome and Principe', 'code3' => 'STP'], | |
| 'SA' => ['name' => 'Saudi Arabia', 'code3' => 'SAU'], | |
| 'SN' => ['name' => 'Senegal', 'code3' => 'SEN'], | |
| 'RS' => ['name' => 'Serbia', 'code3' => 'SRB'], | |
| 'SC' => ['name' => 'Seychelles', 'code3' => 'SYC'], | |
| 'SL' => ['name' => 'Sierra Leone', 'code3' => 'SLE'], | |
| 'SG' => ['name' => 'Singapore', 'code3' => 'SGP'], | |
| 'SX' => ['name' => 'Sint Maarten', 'code3' => 'SXM'], | |
| 'SK' => ['name' => 'Slovakia', 'code3' => 'SVK'], | |
| 'SI' => ['name' => 'Slovenia', 'code3' => 'SVN'], | |
| 'SB' => ['name' => 'Solomon Islands', 'code3' => 'SLB'], | |
| 'SO' => ['name' => 'Somalia', 'code3' => 'SOM'], | |
| 'ZA' => ['name' => 'South Africa', 'code3' => 'ZAF'], | |
| 'KR' => ['name' => 'South Korea', 'code3' => 'KOR'], | |
| 'SS' => ['name' => 'South Sudan', 'code3' => 'SSD'], | |
| 'ES' => ['name' => 'Spain', 'code3' => 'ESP'], | |
| 'LK' => ['name' => 'Sri Lanka', 'code3' => 'LKA'], | |
| 'SD' => ['name' => 'Sudan', 'code3' => 'SDN'], | |
| 'SR' => ['name' => 'Suriname', 'code3' => 'SUR'], | |
| 'SE' => ['name' => 'Sweden', 'code3' => 'SWE'], | |
| 'CH' => ['name' => 'Switzerland', 'code3' => 'CHE'], | |
| 'SY' => ['name' => 'Syria', 'code3' => 'SYR'], | |
| 'TW' => ['name' => 'Taiwan', 'code3' => 'TWN'], | |
| 'TJ' => ['name' => 'Tajikistan', 'code3' => 'TJK'], | |
| 'TZ' => ['name' => 'Tanzania', 'code3' => 'TZA'], | |
| 'TH' => ['name' => 'Thailand', 'code3' => 'THA'], | |
| 'TL' => ['name' => 'Timor-Leste', 'code3' => 'TLS'], | |
| 'TG' => ['name' => 'Togo', 'code3' => 'TGO'], | |
| 'TO' => ['name' => 'Tonga', 'code3' => 'TON'], | |
| 'TT' => ['name' => 'Trinidad and Tobago', 'code3' => 'TTO'], | |
| 'TN' => ['name' => 'Tunisia', 'code3' => 'TUN'], | |
| 'TR' => ['name' => 'Turkey', 'code3' => 'TUR'], | |
| 'TM' => ['name' => 'Turkmenistan', 'code3' => 'TKM'], | |
| 'TC' => ['name' => 'Turks and Caicos Islands', 'code3' => 'TCA'], | |
| 'TV' => ['name' => 'Tuvalu', 'code3' => 'TUV'], | |
| 'UG' => ['name' => 'Uganda', 'code3' => 'UGA'], | |
| 'UA' => ['name' => 'Ukraine', 'code3' => 'UKR'], | |
| 'AE' => ['name' => 'United Arab Emirates', 'code3' => 'ARE'], | |
| 'GB' => ['name' => 'United Kingdom', 'code3' => 'GBR'], | |
| 'US' => ['name' => 'United States', 'code3' => 'USA'], | |
| 'UY' => ['name' => 'Uruguay', 'code3' => 'URY'], | |
| 'UZ' => ['name' => 'Uzbekistan', 'code3' => 'UZB'], | |
| 'VU' => ['name' => 'Vanuatu', 'code3' => 'VUT'], | |
| 'VE' => ['name' => 'Venezuela', 'code3' => 'VEN'], | |
| 'VN' => ['name' => 'Vietnam', 'code3' => 'VNM'], | |
| 'YE' => ['name' => 'Yemen', 'code3' => 'YEM'], | |
| 'ZM' => ['name' => 'Zambia', 'code3' => 'ZMB'], | |
| 'ZW' => ['name' => 'Zimbabwe', 'code3' => 'ZWE'] | |
| ]; | |
| const PPP_DATA = [ | |
| 'AFG' => ['ppp' => 0.22], | |
| 'ALB' => ['ppp' => 0.41], | |
| 'DZA' => ['ppp' => 0.3], | |
| 'AGO' => ['ppp' => 0.3], | |
| 'ATG' => ['ppp' => 0.75], | |
| 'ARG' => ['ppp' => 0.45], | |
| 'ARM' => ['ppp' => 0.32], | |
| 'ABW' => ['ppp' => 0.69], | |
| 'AUS' => ['ppp' => 1.07], | |
| 'AUT' => ['ppp' => 0.91], | |
| 'AZE' => ['ppp' => 0.34], | |
| 'BHS' => ['ppp' => 0.83], | |
| 'BHR' => ['ppp' => 0.49], | |
| 'BGD' => ['ppp' => 0.38], | |
| 'BRB' => ['ppp' => 1.14], | |
| 'BLR' => ['ppp' => 0.34], | |
| 'BEL' => ['ppp' => 0.88], | |
| 'BLZ' => ['ppp' => 0.65], | |
| 'BEN' => ['ppp' => 0.36], | |
| 'BMU' => ['ppp' => 1.29], | |
| 'BTN' => ['ppp' => 0.27], | |
| 'BOL' => ['ppp' => 0.38], | |
| 'BIH' => ['ppp' => 0.41], | |
| 'BWA' => ['ppp' => 0.42], | |
| 'BRA' => ['ppp' => 0.47], | |
| 'BRN' => ['ppp' => 0.48], | |
| 'BGR' => ['ppp' => 0.44], | |
| 'BFA' => ['ppp' => 0.37], | |
| 'BDI' => ['ppp' => 0.29], | |
| 'KHM' => ['ppp' => 0.34], | |
| 'CMR' => ['ppp' => 0.41], | |
| 'CAN' => ['ppp' => 1.00], | |
| 'CPV' => ['ppp' => 0.49], | |
| 'CYM' => ['ppp' => 1.17], | |
| 'CAF' => ['ppp' => 0.5], | |
| 'TCD' => ['ppp' => 0.44], | |
| 'CHL' => ['ppp' => 0.57], | |
| 'CHN' => ['ppp' => 0.65], | |
| 'COL' => ['ppp' => 0.36], | |
| 'COM' => ['ppp' => 0.44], | |
| 'COG' => ['ppp' => null], | |
| 'CRI' => ['ppp' => 0.53], | |
| 'CIV' => ['ppp' => 0.44], | |
| 'HRV' => ['ppp' => 0.52], | |
| 'CUW' => ['ppp' => 0.78], | |
| 'CYP' => ['ppp' => 0.72], | |
| 'CZE' => ['ppp' => 0.6], | |
| 'COD' => ['ppp' => 0.49], | |
| 'DNK' => ['ppp' => 1.05], | |
| 'DJI' => ['ppp' => 0.58], | |
| 'DMA' => ['ppp' => 0.64], | |
| 'DOM' => ['ppp' => 0.41], | |
| 'TLS' => ['ppp' => 0.5], | |
| 'ECU' => ['ppp' => 0.51], | |
| 'EGY' => ['ppp' => 0.29], | |
| 'SLV' => ['ppp' => 0.46], | |
| 'GNQ' => ['ppp' => 0.47], | |
| 'ERI' => ['ppp' => 0.36], | |
| 'EST' => ['ppp' => 0.65], | |
| 'SWZ' => ['ppp' => 0.41], | |
| 'ETH' => ['ppp' => 0.36], | |
| 'FJI' => ['ppp' => 0.41], | |
| 'FIN' => ['ppp' => 0.98], | |
| 'FRA' => ['ppp' => 0.86], | |
| 'GAB' => ['ppp' => 0.57], | |
| 'GMB' => ['ppp' => 0.34], | |
| 'GEO' => ['ppp' => 0.3], | |
| 'DEU' => ['ppp' => 0.88], | |
| 'GHA' => ['ppp' => 0.4], | |
| 'GRC' => ['ppp' => 0.65], | |
| 'GRD' => ['ppp' => 0.6], | |
| 'GTM' => ['ppp' => 0.51], | |
| 'GIN' => ['ppp' => 0.41], | |
| 'GNB' => ['ppp' => 0.4], | |
| 'GUY' => ['ppp' => 0.42], | |
| 'HTI' => ['ppp' => 0.58], | |
| 'HND' => ['ppp' => 0.45], | |
| 'HKG' => ['ppp' => 0.76], | |
| 'HUN' => ['ppp' => 0.51], | |
| 'ISL' => ['ppp' => 1.19], | |
| 'IND' => ['ppp' => 0.31], | |
| 'IDN' => ['ppp' => 0.33], | |
| 'IRN' => ['ppp' => 0.25], | |
| 'IRQ' => ['ppp' => 0.49], | |
| 'IRL' => ['ppp' => 0.93], | |
| 'ISR' => ['ppp' => 1.18], | |
| 'ITA' => ['ppp' => 0.77], | |
| 'JAM' => ['ppp' => 0.49], | |
| 'JPN' => ['ppp' => 0.91], | |
| 'JOR' => ['ppp' => 0.4], | |
| 'KAZ' => ['ppp' => 0.36], | |
| 'KEN' => ['ppp' => 0.4], | |
| 'KIR' => ['ppp' => 0.75], | |
| 'KOS' => ['ppp' => 0.4], | |
| 'KWT' => ['ppp' => 0.52], | |
| 'KGZ' => ['ppp' => 0.24], | |
| 'LAO' => ['ppp' => 0.29], | |
| 'LVA' => ['ppp' => 0.6], | |
| 'LBN' => ['ppp' => 0.29], | |
| 'LSO' => ['ppp' => 0.43], | |
| 'LBR' => ['ppp' => 0.43], | |
| 'LBY' => ['ppp' => 0.26], | |
| 'LTU' => ['ppp' => 0.55], | |
| 'LUX' => ['ppp' => 1.01], | |
| 'MAC' => ['ppp' => 0.62], | |
| 'MDG' => ['ppp' => 0.31], | |
| 'MWI' => ['ppp' => 0.39], | |
| 'MYS' => ['ppp' => 0.38], | |
| 'MDV' => ['ppp' => 0.5], | |
| 'MLI' => ['ppp' => 0.38], | |
| 'MLT' => ['ppp' => 0.69], | |
| 'MHL' => ['ppp' => 0.94], | |
| 'MRT' => ['ppp' => 0.37], | |
| 'MUS' => ['ppp' => 0.4], | |
| 'MEX' => ['ppp' => 0.5], | |
| 'FSM' => ['ppp' => 0.98], | |
| 'MDA' => ['ppp' => 0.34], | |
| 'MNG' => ['ppp' => 0.36], | |
| 'MNE' => ['ppp' => 0.41], | |
| 'MAR' => ['ppp' => 0.43], | |
| 'MOZ' => ['ppp' => 0.36], | |
| 'MMR' => ['ppp' => 0.27], | |
| 'NAM' => ['ppp' => 0.48], | |
| 'NRU' => ['ppp' => 0.81], | |
| 'NPL' => ['ppp' => 0.29], | |
| 'NLD' => ['ppp' => 0.91], | |
| 'NZL' => ['ppp' => 1.05], | |
| 'NIC' => ['ppp' => 0.33], | |
| 'NER' => ['ppp' => 0.45], | |
| 'NGA' => ['ppp' => 0.38], | |
| 'MKD' => ['ppp' => 0.37], | |
| 'NOR' => ['ppp' => 1.13], | |
| 'OMN' => ['ppp' => 0.52], | |
| 'PAK' => ['ppp' => 0.26], | |
| 'PLW' => ['ppp' => 0.8], | |
| 'PSE' => ['ppp' => 0.59], | |
| 'PAN' => ['ppp' => 0.46], | |
| 'PNG' => ['ppp' => 0.66], | |
| 'PRY' => ['ppp' => 0.39], | |
| 'PER' => ['ppp' => 0.48], | |
| 'PHL' => ['ppp' => 0.39], | |
| 'POL' => ['ppp' => 0.48], | |
| 'PRT' => ['ppp' => 0.68], | |
| 'PRI' => ['ppp' => 0.91], | |
| 'QAT' => ['ppp' => 0.66], | |
| 'ROU' => ['ppp' => 0.41], | |
| 'RUS' => ['ppp' => 0.37], | |
| 'RWA' => ['ppp' => 0.33], | |
| 'KNA' => ['ppp' => 0.62], | |
| 'LCA' => ['ppp' => 0.66], | |
| 'VCT' => ['ppp' => 0.58], | |
| 'WSM' => ['ppp' => 0.63], | |
| 'SMR' => ['ppp' => 0.76], | |
| 'STP' => ['ppp' => 0.53], | |
| 'SAU' => ['ppp' => 0.48], | |
| 'SEN' => ['ppp' => 0.43], | |
| 'SRB' => ['ppp' => 0.43], | |
| 'SYC' => ['ppp' => 0.46], | |
| 'SLE' => ['ppp' => 0.27], | |
| 'SGP' => ['ppp' => 0.62], | |
| 'SXM' => ['ppp' => 0.81], | |
| 'SVK' => ['ppp' => 0.64], | |
| 'SVN' => ['ppp' => 0.67], | |
| 'SLB' => ['ppp' => 0.87], | |
| 'SOM' => ['ppp' => 0.36], | |
| 'ZAF' => ['ppp' => 0.48], | |
| 'KOR' => ['ppp' => 0.74], | |
| 'SSD' => ['ppp' => null], // No data provided | |
| 'ESP' => ['ppp' => 0.74], | |
| 'LKA' => ['ppp' => 0.27], | |
| 'SDN' => ['ppp' => 0.18], | |
| 'SUR' => ['ppp' => 0.3], | |
| 'SWE' => ['ppp' => 1.02], | |
| 'CHE' => ['ppp' => 1.21], | |
| 'TJK' => ['ppp' => 0.21], | |
| 'TZA' => ['ppp' => 0.39], | |
| 'THA' => ['ppp' => 0.38], | |
| 'TGO' => ['ppp' => 0.42], | |
| 'TON' => ['ppp' => 0.66], | |
| 'TTO' => ['ppp' => 0.63], | |
| 'TUN' => ['ppp' => 0.34], | |
| 'TUR' => ['ppp' => 0.31], | |
| 'TKM' => ['ppp' => 0.47], | |
| 'TCA' => ['ppp' => 1.03], | |
| 'TUV' => ['ppp' => 1.04], | |
| 'UGA' => ['ppp' => 0.36], | |
| 'UKR' => ['ppp' => 0.34], | |
| 'ARE' => ['ppp' => 0.58], | |
| 'GBR' => ['ppp' => 0.95], | |
| 'USA' => ['ppp' => 1.00], | |
| 'URY' => ['ppp' => 0.69], | |
| 'UZB' => ['ppp' => 0.23], | |
| 'VUT' => ['ppp' => 0.98], | |
| 'VEN' => ['ppp' => null], // No data provided | |
| 'VNM' => ['ppp' => 0.32], | |
| 'YEM' => ['ppp' => null], // No data provided | |
| 'ZMB' => ['ppp' => 0.32], | |
| 'ZWE' => ['ppp' => 0.76] | |
| ]; | |
| protected float $minValue = 0.5; | |
| // for example LUX has PPP of 1.01, if this value is set to false, no increase in price will ever happen | |
| protected bool $allowIncrease = false; | |
| /** | |
| * @param float|null $minValue | |
| * @param bool|null $allowIncrease | |
| */ | |
| public function __construct(?float $minValue = null, ?bool $allowIncrease = false) | |
| { | |
| // override max value if set | |
| if (!is_null($minValue) && $minValue > 0) { | |
| $this->minValue = $minValue; | |
| } | |
| // same for allow increase | |
| if (!is_null($allowIncrease)) { | |
| $this->allowIncrease = $allowIncrease; | |
| } | |
| } | |
| /** | |
| * @param string $countryCode | |
| * @param float $amount | |
| * @return float | |
| */ | |
| public function returnAdjustedPrice(string $countryCode, float $amount): float | |
| { | |
| $pppRate = $this->getPPPValueForCountry($countryCode); | |
| // if there isn't one, return the original amount | |
| if (!$pppRate) { | |
| return $amount; | |
| } | |
| return round($pppRate * $amount, 2); | |
| } | |
| /** | |
| * @param string $countryCode | |
| * @return float|null | |
| */ | |
| public function getPPPValueForCountry(string $countryCode): ?float | |
| { | |
| // first get 3 letter country code from 2 letter country code | |
| $countryCode3 = self::COUNTRY_MAP[$countryCode]['code3'] ?? null; | |
| // if we can't get a country code then just return nothing... | |
| if (!$countryCode3) { | |
| return null; | |
| } | |
| $pppRate = self::PPP_DATA[$countryCode3]['ppp'] ?? null; | |
| // if we don't have a rate, then just return nothing | |
| if (!$pppRate) { | |
| return null; | |
| } | |
| // if we're not allowed to increase and the rate is > 1 then max it out at 1s | |
| if ($pppRate > 1 && !$this->allowIncrease) { | |
| return 1; | |
| } | |
| // if the amount is below the minimum, then set to the minimum | |
| if ($pppRate < $this->minValue) { | |
| $pppRate = $this->minValue; | |
| } | |
| return $pppRate; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This a different approach using an API that code is more functional.