我遇到了这个问题,我创建的函数接收两个参数,$codeList, $priceList,这两个参数都需要发送XML,对于每个代码和价格,必须在XML中添加一个节点,这是我现在使用的代码,我有问题
$feed = '
<?xml version="1.0" encoding="utf-8" ?>
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
<DocumentVersion>1.01</DocumentVersion>
<MerchantIdentifier>XXXXXXX</MerchantIdentifier>
</Header>
<MessageType>Price</MessageType>';
我创建了两个数组来创建和示例:
$SKU = array('ASUSVNA1','esx','rer','ASUSasVNA1','itemsdasd','item 24');
$price = array(2,3,4,5,6,7);
然后我这样做:
$i = 0;
foreach ($price as $price) {
foreach ($SKU as $SKU) {
$i++;
$feed .='
<Message>
<MessageID>'.$i.'</MessageID>
<Price>
<SKU>'.$SKU.'</SKU>
<StandardPrice currency="USD">'.$price.'</StandardPrice>
</Price>
</Message>';
}
}
$feed .= '
</AmazonEnvelope>';
用于创建XML,但在输出中此消息被发送:警告:为foreach()提供了无效参数。
尝试为数组和变量使用不同的名称
$i = 0;
foreach ($price as $my_price) {
foreach ($SKU as $my_SKU) {
$i++;
$feed .='
<Message>
<MessageID>'.$i.'</MessageID>
<Price>
<SKU>'.$my_SKU.'</SKU>
<StandardPrice currency="USD">'.$my_price.'</StandardPrice>
</Price>
</Message>';
}
}
您正在覆盖foreach中的变量。您应该将$price更改为$prices,将$SKU更改为$SKUs,然后像这样使用:
$SKUs = array('ASUSVNA1','esx','rer','ASUSasVNA1','itemsdasd','item 24');
$prices = array(2,3,4,5,6,7);
foreach ($prices as $price) {
foreach ($SKUs as $SKU) {
//the rest of code
}
}
不确定这是否是它不工作的原因,但在foreach语句中,我永远不会使用$var作为$var。我总是把$var写成$var之类的。我不确定他们是否会踩到对方,但可能就是这样。
我们的答案都是正确的,这是我的一个错误,然而问题来自于这样做的代码,因为它是打印6*6倍的节点,我找到了另一种方法来解决这个问题:
$SKU = array('ASUSVNA1','esx','rer','ASUSasVNA1','itemsdasd','item 24');
$price = array(2,3,4,5,6,7);
创建这个变量来存储数组
$result_array = [
'sku' => '',
'price' => ''
];
在这里存储SKU
foreach ($SKU as $SKU) {
$result_array['sku'][] = $SKU;
}
存储价格
foreach ($price as $price) {
$result_array['price'][] = $price;
}
现在在索引'sku'上创建一个foreach作为$index => $value, $index将允许我计数该数组中的每条记录(在这种情况下,两个都有6条记录,所以对于这个例子是好的),现在技巧出现在节点:
StandardPrice货币=>的"美元"。美元result_array[价格](美元指数)。'
[$index]允许我遍历result_array['price']索引
中的所有索引 $i = 0;
foreach ($result_array['sku'] as $index => $value) {
$i++;
$feed .='
<Message>
<MessageID>'.$i.'</MessageID>
<Price>
<SKU>'.$value.'</SKU>
<StandardPrice currency="USD">'.$result_array['price'][$index].'</StandardPrice>
</Price>
</Message>';
}
$feed .= '
</AmazonEnvelope>';
问题解决了,谢谢大家。