数组PHP,存储值到键和检索然后


Arrays PHP, store values into keys and retrieve then

我遇到了这个问题,我创建的函数接收两个参数,$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>';

问题解决了,谢谢大家。