2013-06-05 68 views
0

主要想法:使用简单XML我希望能够根据其中一个属性对数据进行分组。使用SimpleXML基于属性对XML数据进行分组

我的数据设置的一个例子(简体):以我目前使用SimpleXML来搜索一个等级(即第八位),然后下面的清单它给我的每个条目的名称上面的例子

[Entry] 
[Entry Id]1[/Entry Id] 
[Field 1]First Name[/Field 1] 
[Field 2]Last Name[/Field 2] 
[Field 3]Grade[/Field 3] 
[/Entry] 

例如:

**8th Grade** 
Jon Doe 
Jane Smith 

等等。唯一的问题是我为每个想要展示的年级创建一个“foreach”声明。

我认为必须有一种方法可以让每个人按照成绩分组,每次只需添加一个新的成绩并手动键入“foreach”语句。

我是PHP的全新版本,所以您可以给出的任何示例或解释都会非常有帮助。

+0

数据按组字段排序吗? – hakre

回答

0

编辑:到,首先排序,然后输出它。
积分:功能sort_obj_arr撰写者:[GZipp] [1]于this post

// define it 
$xml = simplexml_load_string($x); // assuming XML in $x 
$grades = $xml->xpath("//Entry"); 

// sort it 
sort_obj_arr($grades,'Field_3',SORT_ASC); 

// print it 
$g = ""; 
foreach ($grades as $grade) { 
if ($grade->Field_3 <> $g) {  
     $g = (string)$grade->Field_3; 
    echo "<br />*** grade $g ***<br />"; 
} 
echo $grade->Field_1 . " " . $grade->Field_2 . "<br />"; 
} 

// function for sorting 
function sort_obj_arr(& $arr, $sort_field, $sort_direction) { 
    $sort_func = function($obj_1, $obj_2) use ($sort_field, $sort_direction) { 
     if ($sort_direction == SORT_ASC) { 
      return strnatcasecmp($obj_1->$sort_field, $obj_2->$sort_field); 
     } else { 
      return strnatcasecmp($obj_2->$sort_field, $obj_1->$sort_field); 
     } 
    }; 
    usort($arr, $sort_func); 
} 

看到它的工作:http://codepad.viper-7.com/Saka16

入手:你的XML是无效的,你需要<>和节点名称没有空格:

<Entries> 
    <Entry> 
     <Entry_Id>1</Entry_Id> 
     <Field_1>John</Field_1> 
     <Field_2>Doe</Field_2> 
     <Field_3>8</Field_3> 
    </Entry> 
</Entries> 

到某一个值,选择的节点,使用xpath

$xml = simplexml_load_string($x); // assuming XML in $x 
$grades = $xml->xpath("//Entry[Field_3 = '8']"); 

echo "** grade: " . $grades[0]->Field_3 . "**<br />"; 

foreach ($grades as $grade) { 

    echo $grade->Field_1 . " " . $grade->Field_2 . "<br />"; 

} 

看到它工作ng:http://codepad.viper-7.com/Lke7gc

+0

对不起有关无效的XML,我作为一个例子输入它,它不是我的实际代码。 – hanster

+0

好的,所以这就是我已经做的事情,我想要的是下一步,而不是识别所有记录与“八年级”我希望xml吐出每个年级与他们的相应记录。所以,如果我有24个参赛作品(每个年级2个),我会在这些学生的各个年级下取得12个成绩。 希望这不会让人困惑。 – hanster

+0

@hanster:看我的编辑! – michi

相关问题