首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP解析XML源:按类别划分的组输出

用PHP解析XML源:按类别划分的组输出
EN

Stack Overflow用户
提问于 2012-08-22 16:54:09
回答 2查看 970关注 0票数 2

我正在尝试解析来自作业板XML提要的数据。基本提要语法如下所示:

代码语言:javascript
复制
<jobs>
<job>
    <title>
    <![CDATA[ Senior Data Analyst ]]>
    </title>
    <category>
    <![CDATA[ Analytics ]]>
    </category>
    <url>
    <![CDATA[
    http://www.mysite.com/careers/Senior-Data-Analyst.html
    ]]>
    </url>
</job>
<job>
    <title>
    <![CDATA[ Infrastructure Administrator ]]>
    </title>
    <category>
    <![CDATA[ Information Technology ]]>
    </category>
    <url>
    <![CDATA[
    http://www.mysite.com/careers/Infrastructure-Administrator.html
    ]]>
    </url>
</job>
</jobs>

我已经知道如何使用foreach循环解析基本信息:

代码语言:javascript
复制
<?php
    $jobs = simplexml_load_file('jobfeed.xml');

    foreach ($jobs as $jobDetails):
        $category = $jobDetails->category;
        $title = $jobDetails->title;
        $url = $jobDetails->url;

        echo '<li>Category: ',$category,'<br>Title: ',$title,'<br>URL: ',$url,'</li>';
    endforeach;
?>

但是我想把每一份工作按类别分组,所以看起来如下:

  • 分析
    • 高级数据分析员
    • 其他类型的分析师

  • 信息技术
    • 基础设施管理员

但我不知道如何循环类别数据和分组输出。有什么建议吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-22 17:06:04

不能100%确定您想要做什么,但是您可以很容易地将输出分组如下:

代码语言:javascript
复制
function output_list($jobs = array())
{
    $data = array();

    foreach($jobs as $job_details)
    {
        $category = $job_details->category;
        $title    = $job_details->title;
        $url      = $job_details->url;

        if(!isset($data[$category]))
        {
            $data[$category] = array();
        }

        $data[$category][] = '<li>Category: '.$category.'<br>Title: '.$title.'<br>URL: '.$url.'</li>';
    }

    foreach($data as $category => $items)
    {
        $data[$category] = '<li><ul>'.implode('', $items).'</ul></li>';
    }

    return '<ul>'.implode('', $data).'</ul>'; 
}

echo output_list($jobs);
票数 0
EN

Stack Overflow用户

发布于 2012-08-22 17:03:56

代码语言:javascript
复制
<?php
    $jobs = simplexml_load_file('jobfeed.xml');

    // We will store each category in an array. Each job in each category will be
    // an array storing the Title and URL.
    $categoryArray = array();

    // Loop over XML structure as before.
    foreach ($jobs as $jobDetails):
        $category = $jobDetails->category;
        $title = $jobDetails->title;
        $url = $jobDetails->url;

        // If the current category is not in the array yet, add it.
        if(empty($categoryArray[$category])) {
            $categoryArray[$category] = array();
        }
        // If the current category exists, add the job details to it.
        $categoryArray[$category][] = array(
            "Title" => $title, 
            "Url" => $url
        );
    endforeach;

    // Now we can loop over the sorted array, and output the data as required.
    foreach($categoryArray as $categoryName => $jobArray):
        echo '<li>Category: ' . $category;

        // Within each category, output an inner list for each job.
        echo '<ul>';    
        foreach($jobArray as $job) {
            echo '<li>Title: ' . $job["Title"] . '<br>URL: ' . $job["Url"] . '</li>';
        }

        echo '</ul>';
        echo '</li>';
    endforeach;
?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12077881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档