php - PHP数组仅显示for循环中的最后一项
问题描述
我在做什么:
- 读取 XML 配方文件并获得它的风味(为简单起见,我包含了一个片段)
- 转换它的一些数据
- 使用键创建多个风味数组(尝试)
json_encode
(ing)数组并插入到MySQL DB
(不包括的代码不重要)
问题与问题
我只看到每个数组中每个 XML 配方的最后一项。你能看到我在这里做错了什么吗?
输出:
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
)
解决方案
在循环结束时,您只需将值分配给结束数组的相同元素......
$flavourarray['flavourcompany'] = $flavourCompanyabv2;
$flavourarray['flavourname'] = $flavourName2;
$flavourarray['flavourpercent'] = $flavourPercentage;
这些会覆盖以前的值,并且您不能拥有多个具有相同键名的项目。
而是使用类似...
$flavourarray[] = ['flavourcompany' => $flavourCompanyabv2,
'flavourname' => $flavourName2,
'flavourpercent' => $flavourPercentage ];
它将所有项目添加到一个新元素中。
使用您的测试数据,这给出(缩写)......
[0] => Array
(
[flavourcompany] => Capella
[flavourname] => Chocolate Glazed Doughnut
[flavourpercent] => 7.00
)
[1] => Array
(
[flavourcompany] => Inawera
[flavourname] => Biscuit
[flavourpercent] => 0.75
)
推荐阅读
- php - 找出php文件类型
- amazon-web-services - Amazon Kibana 上的 Datasweet 指标
- python-3.x - 如何设置 FHIR 模型的 BundleEntry 的请求字段
- python - 熊猫中 pd.to_datetime 格式的年份格式错误
- wagtail - ModuleNotFoundError:没有名为“wagtail”的模块。如何解决这个问题?
- html - 如何使用 CSS 使绝对元素具有粘性?
- r - 下标越界,在最后一个值处停止 for 循环
- javascript - 处理 webhook 时有没有办法获取 `updated_by` 字段?(绑带)
- reactjs - TypeError: undefined has no properties loginClicked
- powershell - 使用 powershell 从列表中获取数字来完成 SQL 查询