0

我正在尝试将 XML 项处理为 PHP 数组并简单地返回它。

但是,我在第 3 行收到“数组到字符串转换”作为错误。

PHP 代码

function processPlayers($players) { // paramater is the XML item
    $playerGUIDS = array();
    $playerGUIDArray = explode(";", $players); // CREATE ARRAY FROM STRING WHICH HAVE A ; DELIMINATER

    foreach($playerGUIDArray as $player) {
        $playerGUIDS[] = $player;   
    }
    return $playerGUIDS;
}

XML 项目

<playguid>DC242003;BY523643</playguid>

我正在使用 WP ALL Import 作为插件,因此我将自定义字段数据值指定为

[processPlayers({playguid[1]})]

看这里:

http://www.wpallimport.com/2015/10/wp-all-export-1-1-1-function-editor/ http://www.wpallimport.com/documentation/advanced/execute-php/

我的理想输出如下(这是 WordPress 数据库中元数据的形式)。

a:2:{i:0;s:8:"JC745819";i:1;s:8:"JB705789";}
4

2 回答 2

0

您收到错误,因为 WPAllImport 尝试将此值插入数据库。因此,您必须返回函数string值,而不是数组。在您的情况下,序列化:

function processPlayers($players) {
    return serialize(explode(";", $players));
}
于 2016-06-06T16:37:23.887 回答
0

我刚刚在将多个 XML 项解析为数组时遇到了一个密切相关的案例。由于这是该主题中排名最高的搜索结果之一,我认为以下内容可能对其他人有所帮助:

WP All Import 不会将数组值传递给您的自定义 PHP 函数。如果您的输入元素不是字符串,而是例如 XML 子元素列表,则 WP All Import 将在您尝试执行以下操作时传递一个空字符串:

<parents>
  <parent>...</parent>
  <parent>...</parent>
  <parent>...</parent>
  ...
</parents>
[IF(has_special_children({parents[1]}))]

<h2>My Conditional Header</h2>

{parents[1]/parent[8]}

{parents[1]/parent[12]}

{parents[1]/parent[13]}

[ENDIF]
<?php
function has_special_children($parent) {
  var_dump(gettype($parent));  // outputs: string
  var_dump($parent);           // outputs: string ""
  return $parent[8] || $parent[12] || $parent[13];
}
?>

在 PHP 函数中,$parent当传递一个有子元素的 XML 元素时,它总是一个空字符串。

解决方案

您可以在 PHP 中使用可变参数函数来传递感兴趣的元素并单独检查它们:

[IF(wpai_has_any_value({parents[1]/parent[8]}, {parents[1]/parent[12]}, {parents[1]/parent[13]}))]

<h2>My Conditional Header</h2>

{parents[1]/parent[8]}

{parents[1]/parent[12]}

{parents[1]/parent[13]}

[ENDIF]
<?php
function wpai_has_any_value(...$values) {
  return (bool) array_filter($values);
}
?>
于 2019-09-27T14:55:56.163 回答