[英]PHP array only showing last item in for loop
json_encode
(ing) the arrays and inserting into a MySQL DB
(code not included as not important) json_encode
(ing) arrays 并插入到MySQL DB
中(代码不包括在内,因为不重要)I am only seeing the last item from each XML recipe in each array.我只看到每个数组中每个 XML 配方的最后一项。 Can you see what I'm doing wrong here?
你能看到我在这里做错了什么吗?
Array
(
[flavourcompany] => Flavor West
[flavourname] => Yellow Cake
[flavourpercent] => 1.00
)
Array
(
[flavourcompany] => Flavour Art
[flavourname] => Honey (Miele)
[flavourpercent] => 0.75
)
$xmldata = '<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="#" ?>
<recipes>
<recipe><name><![CDATA[Bronuts]]></name><pg_vg_goal>30/70</pg_vg_goal><created_at>2016-09-29 07:48:40</created_at><url>http://tjek.nu/r/7eHn</url><flavors><flavor><name>Chocolate Glazed Doughnut (Cap)</name><percentage>7.00</percentage></flavor><flavor><name>Biscuit (Inawera)</name><percentage>0.75</percentage></flavor><flavor><name>Joy (FA)</name><percentage>0.75</percentage></flavor><flavor><name>Bavarian Cream (DX) (TPA)</name><percentage>2.00</percentage></flavor><flavor><name>Yellow Cake (FW)</name><percentage>1.00</percentage></flavor></flavors></recipe>
<recipe><name><![CDATA[Honeybee]]></name><pg_vg_goal>30/70</pg_vg_goal><created_at>2016-09-29 08:53:05</created_at><url>http://tjek.nu/r/7eJD</url><flavors><flavor><name>Cookie (Biscotto) (FA)</name><percentage>1.00</percentage></flavor><flavor><name>Marshmallow (FA)</name><percentage>2.00</percentage></flavor><flavor><name>Caramel (Caramello) (FA)</name><percentage>1.00</percentage></flavor><flavor><name>Cream Fresh (Panna Fresca) (FA)</name><percentage>2.00</percentage></flavor><flavor><name>Honey (Miele) (FA)</name><percentage>0.75</percentage></flavor></flavors></recipe></recipes>';
$bom = simplexml_load_string($xmldata, 'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NOBLANKS);
$json_string = json_encode($bom);
$result_array = json_decode($json_string, TRUE);
$numrecipes = count($result_array['recipe']);
$flavourarray = array();
for($i = 0; $i < $numrecipes; $i++) {
$recipeName = $result_array['recipe'][$i]['name'];
$numflavours = count($result_array['recipe'][$i]['flavors']['flavor']);
for($l = 0; $l < $numflavours; $l++) {
$flavourName = $result_array['recipe'][$i]['flavors']['flavor'][$l]['name'];
$flavourPercentage = $result_array['recipe'][$i]['flavors']['flavor'][$l]['percentage'];
preg_match('/\(([A-Za-z\/]+)\)$/', $flavourName, $flavourCompanyabv);
/**
Replace company abbreviations with full company names
*/
if(trim(strtolower($flavourCompanyabv[1])) == 'cap') {
$flavourCompanyabv2 = 'Capella';
}
elseif(trim(strtolower($flavourCompanyabv[1])) == 'tpa') {
$flavourCompanyabv2 = 'The Perfumers Apprentice';
}
elseif(trim(strtolower($flavourCompanyabv[1])) == 'fa') {
$flavourCompanyabv2 = 'Flavour Art';
}
elseif(trim(strtolower($flavourCompanyabv[1])) == 'inawera' || trim(strtolower($flavourCompanyabv[1])) == 'inw') {
$flavourCompanyabv2 = 'Inawera';
}
elseif(trim(strtolower($flavourCompanyabv[1])) == 'fw') {
$flavourCompanyabv2 = 'Flavor West';
}
elseif(trim(strtolower($flavourCompanyabv[1])) == 'nn') {
$flavourCompanyabv2 = 'Nude Nicotine';
} else {
$flavourCompanyabv2 = $flavourCompanyabv[1];
}
$flavourName2 = trim(preg_replace("/\(([A-Za-z\/]+)\)$/","",$flavourName));
$flavourarray['flavourcompany'] = $flavourCompanyabv2;
$flavourarray['flavourname'] = $flavourName2;
$flavourarray['flavourpercent'] = $flavourPercentage;
}
echo '<pre>';
print_r($flavourarray);
echo '</pre>';
}
Array
(
[flavourCompany] => Capella
[flavourName] => Chocolate Glazed Doughnut
[flavourPercent] => 7.00
[flavourCompany] => Inawera
[flavourName] => Biscuit
[flavourPercent] => 0.75
[flavourCompany] => Flavour Art
[flavourName] => Joy
[flavourPercent] => 0.75
[flavourCompany] => The Perfumers Apprentice
[flavourName] => Bavarian Cream (DX)
[flavourPercent] => 2.00
[flavourCompany] => Flavor West
[flavourName] => Yellow Cake
[flavourPercent] => 1.00
)
Array
(
[flavourCompany] => Capella
[flavourName] => Chocolate Glazed Doughnut
[flavourPercent] => 7.00
[flavourCompany] => Inawera
[flavourName] => Biscuit
[flavourPercent] => 0.75
[flavourCompany] => Flavour Art
[flavourName] => Joy
[flavourPercent] => 0.75
[flavourCompany] => The Perfumers Apprentice
[flavourName] => Bavarian Cream (DX)
[flavourPercent] => 2.00
[flavourCompany] => Flavor West
[flavourName] => Yellow Cake
[flavourPercent] => 1.00
[flavourCompany] => Flavour Art
[flavourName] => Cookie (Biscotto)
[flavourPercent] => 1.00
[flavourCompany] => Flavour Art
[flavourName] => Marshmallow
[flavourPercent] => 2.00
[flavourCompany] => Flavour Art
[flavourName] => Caramel (Caramello)
[flavourPercent] => 1.00
[flavourCompany] => Flavour Art
[flavourName] => Cream Fresh (Panna Fresca)
[flavourPercent] => 2.00
[flavourCompany] => Flavour Art
[flavourName] => Honey (Miele)
[flavourPercent] => 0.75
)
At the end of your loop, you just assign the values to the same elements of the end array...在循环结束时,您只需将值分配给结束数组的相同元素......
$flavourarray['flavourcompany'] = $flavourCompanyabv2;
$flavourarray['flavourname'] = $flavourName2;
$flavourarray['flavourpercent'] = $flavourPercentage;
these overwrite the previous values and you cannot have multiple items with the same key name.这些会覆盖以前的值,并且您不能拥有多个具有相同键名的项目。
Instead use something like...而是使用类似...
$flavourarray[] = ['flavourcompany' => $flavourCompanyabv2,
'flavourname' => $flavourName2,
'flavourpercent' => $flavourPercentage ];
which adds all of the items into a new element.它将所有项目添加到一个新元素中。
With your test data, this gives (abreviated)...使用您的测试数据,这给出(缩写)......
[0] => Array
(
[flavourcompany] => Capella
[flavourname] => Chocolate Glazed Doughnut
[flavourpercent] => 7.00
)
[1] => Array
(
[flavourcompany] => Inawera
[flavourname] => Biscuit
[flavourpercent] => 0.75
)
PHP arrays have unique keys, so you have to build an array of arrays. PHP arrays 具有唯一键,因此您必须构建一个 arrays 数组。 So, you have to change:
所以,你必须改变:
$flavourarray[] = [
'flavourCompany' => $flavourCompanyabv2,
'flavourName' => $flavourName2,
'flavourPercent' => $flavourPercentage
];
The ouput:输出:
array(2) {
[0]=> array(3) {
["flavourCompany"]=> string(7) "Capella"
["flavourName"]=> string(25) "Chocolate Glazed Doughnut"
["flavourPercent"]=> float(7)
}
[1]=> array(3) {
["flavourCompany"]=> string(7) "Inawera"
["flavourName"]=> string(7) "Biscuit"
["flavourPercent"]=> float(0.75)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.