Je développe une matrice de tarification sur mesure pour un client, ils ont des codes pour distinguer les produits avec différentes options, il y a 6 variations différentes pour un code, car il y a 6 types de matériaux différents qui encourent différents coûts, d'autres verrous changent également le code et les coûts basés sur le matériel ... et ainsi de suite.CSV à PHP à JSON en MySQL
Je vais commencer par vous montrer ma structure des prix de base de données (MySQL)
|------
|Field|Type|Null|Default
|------
|//**id**//|mediumint(9)|No|
|jp_code|varchar(7)|No|
|brand_rate|text|No|
|price_25|text|No|
|price_50|text|No|
|price_100|text|No|
|price_250|text|No|
|price_500|text|No|
|price_1000|text|No|
je stocke tous les 6 prix pour chaque code JSON dans les prix et sur le terrain taux de marque, cela est traité par JS plus tard .
donc une entrée typique pour cette base de données ressemble à ceci:
|1|JP6000|["F","F","n\/a","F","F","F"]|["2.92","2.92","n\/a","4.86","6.35","7.62"]|["2.77","2.77","n\/a","4.62","6.03","7.24"]|["2.55","2.55","4.21","4.25","5.55","6.66"]|["2.45","2.45","3.83","4.08","5.33","6.40"]|["2.38","2.38","3.64","3.96","5.17","6.20"]|["2.50","2.33","3.47","3.89","5.08","6.10"]
Le client doit être en mesure de télécharger un fichier CSV, qui peut parfaitement mettre à jour ces prix.
Le fichier CSV ressemblera à ceci:
Si vous jetez un oeil à l'entrée de la ligne MySQL vous devriez être en mesure de se marier les données, donc sur le problème!
J'utilise ceci pour travailler avec des fichiers CSV: parseCSV v0.4.3 beta http://code.google.com/p/parsecsv-for-php/
J'ai pour grouper tous les résultats par le Code JP comme celui-ci:
array(2) {
["JP6000"]=>
array(6) {
[0]=>
array(9) {
["Code"]=>
string(6) "JP6000"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "2.92"
["Price_50"]=>
string(4) "2.77"
["Price_100"]=>
string(4) "2.55"
["Price_250"]=>
string(4) "2.45"
["Price_500"]=>
string(4) "2.38"
["Price_1000"]=>
string(4) "2.33"
["Material"]=>
string(10) "Belluno PU"
}
[1]=>
array(9) {
["Code"]=>
string(6) "JP6000"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "2.92"
["Price_50"]=>
string(4) "2.77"
["Price_100"]=>
string(4) "2.55"
["Price_250"]=>
string(4) "2.45"
["Price_500"]=>
string(4) "2.38"
["Price_1000"]=>
string(4) "2.33"
["Material"]=>
string(9) "Torino PU"
}
[2]=>
array(9) {
["Code"]=>
string(6) "JP6000"
["Brand Rate"]=>
string(3) "n/a"
["Price_25"]=>
string(3) "n/a"
["Price_50"]=>
string(3) "n/a"
["Price_100"]=>
string(4) "4.21"
["Price_250"]=>
string(4) "3.83"
["Price_500"]=>
string(4) "3.64"
["Price_1000"]=>
string(4) "3.47"
["Material"]=>
string(11) "Full Colour"
}
[3]=>
array(9) {
["Code"]=>
string(6) "JP6000"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "4.86"
["Price_50"]=>
string(4) "4.62"
["Price_100"]=>
string(4) "4.25"
["Price_250"]=>
string(4) "4.08"
["Price_500"]=>
string(4) "3.96"
["Price_1000"]=>
string(4) "3.89"
["Material"]=>
string(8) "Finecell"
}
[4]=>
array(9) {
["Code"]=>
string(6) "JP6000"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "6.35"
["Price_50"]=>
string(4) "6.03"
["Price_100"]=>
string(4) "5.55"
["Price_250"]=>
string(4) "5.33"
["Price_500"]=>
string(4) "5.17"
["Price_1000"]=>
string(4) "5.08"
["Material"]=>
string(5) "Nappa"
}
[5]=>
array(9) {
["Code"]=>
string(6) "JP6000"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "7.62"
["Price_50"]=>
string(4) "7.24"
["Price_100"]=>
string(4) "6.66"
["Price_250"]=>
string(3) "6.4"
["Price_500"]=>
string(3) "6.2"
["Price_1000"]=>
string(3) "6.1"
["Material"]=>
string(8) "Richmond"
}
}
["JP6010"]=>
array(6) {
[0]=>
array(9) {
["Code"]=>
string(6) "JP6010"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "3.41"
["Price_50"]=>
string(4) "3.24"
["Price_100"]=>
string(4) "2.98"
["Price_250"]=>
string(4) "2.86"
["Price_500"]=>
string(4) "2.78"
["Price_1000"]=>
string(4) "2.73"
["Material"]=>
string(10) "Belluno PU"
}
[1]=>
array(9) {
["Code"]=>
string(6) "JP6010"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "3.41"
["Price_50"]=>
string(4) "3.24"
["Price_100"]=>
string(4) "2.98"
["Price_250"]=>
string(4) "2.86"
["Price_500"]=>
string(4) "2.78"
["Price_1000"]=>
string(4) "2.73"
["Material"]=>
string(9) "Torino PU"
}
[2]=>
array(9) {
["Code"]=>
string(6) "JP6010"
["Brand Rate"]=>
string(3) "n/a"
["Price_25"]=>
string(3) "n/a"
["Price_50"]=>
string(3) "n/a"
["Price_100"]=>
string(4) "4.77"
["Price_250"]=>
string(4) "4.33"
["Price_500"]=>
string(4) "4.13"
["Price_1000"]=>
string(4) "3.93"
["Material"]=>
string(11) "Full Colour"
}
[3]=>
array(9) {
["Code"]=>
string(6) "JP6010"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "5.41"
["Price_50"]=>
string(4) "5.14"
["Price_100"]=>
string(4) "4.74"
["Price_250"]=>
string(4) "4.55"
["Price_500"]=>
string(4) "4.41"
["Price_1000"]=>
string(4) "4.33"
["Material"]=>
string(8) "Finecell"
}
[4]=>
array(9) {
["Code"]=>
string(6) "JP6010"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(3) "6.9"
["Price_50"]=>
string(4) "6.56"
["Price_100"]=>
string(4) "6.04"
["Price_250"]=>
string(3) "5.8"
["Price_500"]=>
string(4) "5.63"
["Price_1000"]=>
string(4) "5.52"
["Material"]=>
string(5) "Nappa"
}
[5]=>
array(9) {
["Code"]=>
string(6) "JP6010"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "8.28"
["Price_50"]=>
string(4) "7.87"
["Price_100"]=>
string(4) "7.25"
["Price_250"]=>
string(4) "6.96"
["Price_500"]=>
string(4) "6.76"
["Price_1000"]=>
string(4) "6.62"
["Material"]=>
string(8) "Richmond"
}
}
}
array(2) {
["JP6000"]=>
array(6) {
[0]=>
array(9) {
["Code"]=>
string(6) "JP6000"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "2.92"
["Price_50"]=>
string(4) "2.77"
["Price_100"]=>
string(4) "2.55"
["Price_250"]=>
string(4) "2.45"
["Price_500"]=>
string(4) "2.38"
["Price_1000"]=>
string(4) "2.33"
["Material"]=>
string(10) "Belluno PU"
}
[1]=>
array(9) {
["Code"]=>
string(6) "JP6000"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "2.92"
["Price_50"]=>
string(4) "2.77"
["Price_100"]=>
string(4) "2.55"
["Price_250"]=>
string(4) "2.45"
["Price_500"]=>
string(4) "2.38"
["Price_1000"]=>
string(4) "2.33"
["Material"]=>
string(9) "Torino PU"
}
[2]=>
array(9) {
["Code"]=>
string(6) "JP6000"
["Brand Rate"]=>
string(3) "n/a"
["Price_25"]=>
string(3) "n/a"
["Price_50"]=>
string(3) "n/a"
["Price_100"]=>
string(4) "4.21"
["Price_250"]=>
string(4) "3.83"
["Price_500"]=>
string(4) "3.64"
["Price_1000"]=>
string(4) "3.47"
["Material"]=>
string(11) "Full Colour"
}
[3]=>
array(9) {
["Code"]=>
string(6) "JP6000"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "4.86"
["Price_50"]=>
string(4) "4.62"
["Price_100"]=>
string(4) "4.25"
["Price_250"]=>
string(4) "4.08"
["Price_500"]=>
string(4) "3.96"
["Price_1000"]=>
string(4) "3.89"
["Material"]=>
string(8) "Finecell"
}
[4]=>
array(9) {
["Code"]=>
string(6) "JP6000"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "6.35"
["Price_50"]=>
string(4) "6.03"
["Price_100"]=>
string(4) "5.55"
["Price_250"]=>
string(4) "5.33"
["Price_500"]=>
string(4) "5.17"
["Price_1000"]=>
string(4) "5.08"
["Material"]=>
string(5) "Nappa"
}
[5]=>
array(9) {
["Code"]=>
string(6) "JP6000"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "7.62"
["Price_50"]=>
string(4) "7.24"
["Price_100"]=>
string(4) "6.66"
["Price_250"]=>
string(3) "6.4"
["Price_500"]=>
string(3) "6.2"
["Price_1000"]=>
string(3) "6.1"
["Material"]=>
string(8) "Richmond"
}
}
["JP6010"]=>
array(6) {
[0]=>
array(9) {
["Code"]=>
string(6) "JP6010"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "3.41"
["Price_50"]=>
string(4) "3.24"
["Price_100"]=>
string(4) "2.98"
["Price_250"]=>
string(4) "2.86"
["Price_500"]=>
string(4) "2.78"
["Price_1000"]=>
string(4) "2.73"
["Material"]=>
string(10) "Belluno PU"
}
[1]=>
array(9) {
["Code"]=>
string(6) "JP6010"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "3.41"
["Price_50"]=>
string(4) "3.24"
["Price_100"]=>
string(4) "2.98"
["Price_250"]=>
string(4) "2.86"
["Price_500"]=>
string(4) "2.78"
["Price_1000"]=>
string(4) "2.73"
["Material"]=>
string(9) "Torino PU"
}
[2]=>
array(9) {
["Code"]=>
string(6) "JP6010"
["Brand Rate"]=>
string(3) "n/a"
["Price_25"]=>
string(3) "n/a"
["Price_50"]=>
string(3) "n/a"
["Price_100"]=>
string(4) "4.77"
["Price_250"]=>
string(4) "4.33"
["Price_500"]=>
string(4) "4.13"
["Price_1000"]=>
string(4) "3.93"
["Material"]=>
string(11) "Full Colour"
}
[3]=>
array(9) {
["Code"]=>
string(6) "JP6010"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "5.41"
["Price_50"]=>
string(4) "5.14"
["Price_100"]=>
string(4) "4.74"
["Price_250"]=>
string(4) "4.55"
["Price_500"]=>
string(4) "4.41"
["Price_1000"]=>
string(4) "4.33"
["Material"]=>
string(8) "Finecell"
}
[4]=>
array(9) {
["Code"]=>
string(6) "JP6010"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(3) "6.9"
["Price_50"]=>
string(4) "6.56"
["Price_100"]=>
string(4) "6.04"
["Price_250"]=>
string(3) "5.8"
["Price_500"]=>
string(4) "5.63"
["Price_1000"]=>
string(4) "5.52"
["Material"]=>
string(5) "Nappa"
}
[5]=>
array(9) {
["Code"]=>
string(6) "JP6010"
["Brand Rate"]=>
string(1) "F"
["Price_25"]=>
string(4) "8.28"
["Price_50"]=>
string(4) "7.87"
["Price_100"]=>
string(4) "7.25"
["Price_250"]=>
string(4) "6.96"
["Price_500"]=>
string(4) "6.76"
["Price_1000"]=>
string(4) "6.62"
["Material"]=>
string(8) "Richmond"
}
}
}
Alors Ce que je dois faire est de regrouper ces données et de les convertir en une chaîne JSON comme vous le voyez dans les enregistrements MySQL en utilisant les informations pour chaque code.
La première entrée pour le réseau price_25 json pour JP6000 serait 2,92 et la seconde 2,92 - troisième étant n/a
Ceci doit également faire une boucle à travers et mettre à jour chaque rangée mysql en conséquence sur la base du code JP étant le principal clé.
J'espère que tout cela a du sens? très difficile!
réponse standard, ne stocke pas les données au format JSON. Il est destiné à la présentation. – ajreal
Merci pour ce commentaire utile ... malheureusement, tout ne fonctionne pas comme par magie alors nous devons trouver des moyens de contourner le problème pour éviter de dire NON au client, c'est la seule façon de leur fournir cette solution. –