我正在尝试解析来自作业板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;
?>但是我想把每一份工作按类别分组,所以看起来如下:
但我不知道如何循环类别数据和分组输出。有什么建议吗?谢谢。
发布于 2012-08-22 17:06:04
不能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-22 17:03:56
<?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;
?>https://stackoverflow.com/questions/12077881
复制相似问题