使用foreach创建关联数组,将object作为值

时间:2013-01-10 00:21:32

标签: php foreach xml-rpc associative-array

我正在使用XMLRPC构建一个XML结构,将产品信息传递给第三方系统。我需要构建产品自定义选项的关联数组,我不知道使用什么语法,因为每种情况下的值都是一个对象。

我无法调试和玩它,因为我通常会相信或不相信我必须在现场网站上这样做,所以我一直在给自己发电子邮件以确保它看起来不错,然后当我将它应用到网站时,XMLRPC会抛出一个错误,说它无法序列化我构建的对象,然后我再次快速将其重新打开。

如果我像这样对它进行硬编码就可以了。

    $item_array = array(
       "product_id" => new xmlrpcval($item->getSku()),
       "name" => new xmlrpcval($item->getName()),
       "price" => new xmlrpcval($item->getBaseCalculationPrice(), 'double'),
       "vat_inclusive" => new xmlrpcval(0,'int'),
       "quantity" => new xmlrpcval($item->getQty(),'int'),
       "option_text" => new xmlrpcval(
           array(
              "option_1" => new xmlrpcval("Colour: Military Black"),
              "option_2" => new xmlrpcval("Sizes: L")
           ),
           "struct")                          
        );

这是我需要生成的下一部分,特别是foreach循环中的数组,因为我不知道会有多少选项;

       "option_text" => new xmlrpcval(
           array(
              "option_1" => new xmlrpcval("Colour: Military Black"),
              "option_2" => new xmlrpcval("Sizes: L")
           ),
           "struct")  

如果我这样做,那么它很好,但是值是一个字符串而不是一个对象,XMLRPC无法序列化;

      $optioncount = 1;
      $attList = array();

      foreach ( $attributes as $attribute => $value ) {

          $attpair = implode(": ", $value);

          $attList['option_'. $optioncount] = 'new xmlrpcval("'.$attpair.'")';

          $optioncount++;

      }

如果我var_dump($attList)我得到了;

array(2) {
  ["option_1"]=>
  string(39) "new xmlrpcval("Colour: Military Black")"
  ["option_2"]=>
  string(25) "new xmlrpcval("Sizes: L")"
}

任何其他方式似乎都会使$attList变成一团糟 - 我知道这应该是非常基本的但是对于我的生活,我无法使其发挥作用。谢谢你的任何指示。

如果我var_dump($attList)使用new xmlrpcval($attpair);,我会得到;

array(2) {
  ["option_1"]=>
  object(xmlrpcval)#469 (3) {
    ["me"]=>
    array(1) {
      ["string"]=>
      string(22) "Colour: Military Black"
    }
    ["mytype"]=>
    int(1)
    ["_php_class"]=>
    NULL
  }
  ["option_2"]=>
  object(xmlrpcval)#433 (3) {
    ["me"]=>
    array(1) {
      ["string"]=>
      string(8) "Sizes: L"
    }
    ["mytype"]=>
    int(1)
    ["_php_class"]=>
    NULL
 }

}

1 个答案:

答案 0 :(得分:2)

构建数组必须如下所示:

  $optioncount = 1;
  $attList = array();

  foreach ( $attributes as $attribute => $value ) {

      $attpair = implode(": ", $value);

      $attList['option_'. $optioncount] = new xmlrpcval($attpair);

      $optioncount++;

  }

然后:

"option_text" => new xmlrpcval(
       $attList,
       "struct")