2

求人掲示板の XML フィードからデータを解析しようとしています。基本的なフィード構文は次のようになります。

<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 ループを使用して基本情報を解析する方法は既に知っています。

<?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;
?>

しかし、各ジョブをカテゴリ別にグループ化したいので、次のようになります。

  • 分析
    • シニアデータアナリスト
    • 他の種類のアナリスト
  • 情報技術
    • インフラ管理者

しかし、カテゴリ データをループして出力をグループ化する方法がわかりません。提案?ありがとう。

4

2 に答える 2

1
<?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;
?>
于 2012-08-22T17:03:56.793 に答える
0

何をしようとしているのか 100% 確信があるわけではありませんが、次のように出力を簡単にグループ化できます。

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);
于 2012-08-22T17:06:04.297 に答える