【问题标题】:Convert SimpleXMLElement to JSON array将 SimpleXMLElement 转换为 JSON 数组
【发布时间】:2014-08-01 11:53:18
【问题描述】:

我有一个存储过程 (SQL Server),它返回以下 XML,这是给定月份搜索词的前 20 名排名。 使用以下 PHP,我可以获取此 XML 并循环遍历它:

foreach ($objSearchTerms->searchTerms as $terms){ echo $terms->searchTerm; };

提取工作并返回正确的数据。但是,我的问题是我需要从中创建一个数组,如下所示,以便在 JS 中使用。

谁能告诉我如何做到这一点? 数组的文本部分将是我的搜索词 ($terms->searchTerm),权重只是从 20 到 0 的反向计数。

我的 simpleXML:

<ranks>
  <searchTerms>
    <rank>1</rank>
    <searchTerm>item 1</searchTerm>
    <volume>11</volume>
  </searchTerms>
  <searchTerms>
    <rank>2</rank>
    <searchTerm>item 2</searchTerm>
    <volume>8</volume>
  </searchTerms>
  <searchTerms>
    <rank>3</rank>
    <searchTerm>item 3</searchTerm>
    <volume>5</volume>
  </searchTerms>
  // ...
</ranks>

预期结果:

var word_array = [
    {text: "item 1", weight: 20},
    {text: "item 2", weight: 19},
    {text: "item 3", weight: 18},
    // ...
];

我尝试了类似以下的方法,但这不起作用,可能不是正确的方法:

$count = 21;
foreach ($objSearchTerms->searchTerms as $terms){ 
    $count--;
    echo "{text: '" . $terms->searchTerm . "', weight: " . $count . "},";
}

【问题讨论】:

    标签: php arrays xml json loops


    【解决方案1】:

    此代码可能对您有所帮助

    $xml = simplexml_load_file("file.xml");
    $result = [];
    $count = 20;
    foreach ($xml->searchTerms as $value) 
    {
        $child = [];
        $child['text'] = (string)$value->searchTerm;
        $child['weight'] = $count--;
        $result[] = $child;
    }
    $json_string = json_encode($result);
    

    我得到的结果是

    [
        {"text":"item 1","weight":20},
        {"text":"item 2","weight":19},
        {"text":"item 3","weight":18}
    ]
    

    【讨论】:

    • 谢谢,Khalid,对不起 - 我刚刚看到 Dreamweaver 向我显示 $child = []; 行的错误- 任何可能导致这种情况的原因?我应该只写 = array() 吗?
    • 试试改成$child = Array();
    • 已接受 - 谢谢!我将如何返回结果? print_r 不会在这里工作,对吧?
    • 对象数组的结果在$result中,您可以尝试print_rvar_dump ...如果您需要将结果作为字符串,您可以在@987654327中找到它@
    • 您好 Khalid - 非常感谢您的回复,并对延迟回复表示歉意!
    猜你喜欢
    • 2011-04-30
    • 1970-01-01
    • 2014-05-26
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多