所以我知道那里有关于自定义订购的文章,但我认为我的情况可能有点不同(或者可能只是我的解决方法很糟糕:P)。这是快速方案。
我从我们拥有的报告网址中提取XML数据。 (格式不正确!)所以让我们使用下面的例子:我在一个长列表中得到以下数据。
<Site>My Sites</Site>
<Customer>PHPSTEVE</Customer>
<Name>Griswald</Name>
<Site> Evil Dead</Site>
<Customer>Bruce</Customer>
<Name>Campbell</Name>
我无法使用XML函数,因为格式标题不正确所以我不会进入那个......所以我使用了preg_match_all
preg_match_all("/<Site>(.*?)<\/Site>|<Customer>(.*?)<\/Customer>|<Name>(.*?)<\/Name>/is", $resp, $output_array[]);
然后我经历了,我知道这不好但是有效..
foreach(array_reverse($output_array[0][0]) as $info){
$myinfo = $info . $myinfo;
}
一切正常,因为我使用str_replace并且只是放入我的表格标签等。显然我正在反向阅读...它确实我想要这样做。
Site | Customer | Name
----------+----------+------
Evil Dead | Bruce | Campbell
如果我想要&#34;客户&#34;现场第一?所以基本上我改变了网站和客户等的水平顺序......请记住,一行中有多条记录,所以我想弄清楚如何将客户移动到我想要的位置......或者任何字段对于这个问题。根据我上面的代码,我不相信我能按照我想要的方式完成它,所以我不确定是否有其他方法可以做到。
我想以此报告:
Customer | Site | Name
---------+-----------+------
Bruce | Evil Dead | Campbell
任何帮助将不胜感激。注意:我不在乎自下而上或自上而下阅读..只是字段更改。感谢
更新:我遇到的XMl问题是:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<results>
<Site>My Sites</Site>
<Customer>PHPSTEVE</Customer>
<Name>Griswald</Name>
<Site> Evil Dead</Site>
<Customer>Bruce</Customer>
<Name>Campbell</Name>
</results>
答案 0 :(得分:0)
也许是这样的?
function sortCustomerKeys($a, $b)
{
if ( $a == 'Customer' && $b != 'Customer' ) {
return 1;
} else if ( $a != 'Customer' && $b == 'Customer' ) {
return -1;
}
return strnatcasecmp($a, $b);
}
$customers = array();
$advance = array(
'Customer' => 0,
'Name' => 0,
'Site' => 0
);
if ( preg_match_all('@<(Customer|Name|Site)>\\s*(.*?)\\s*</\\1>@is', $resp, $m) ) {
for ($i = 0, $j = 0; $i < count($m[1]); $i++) {
$tag = $m[1][$i];
$value = $m[2][$i];
$customers[$j][$tag] = $value;
$advance[$tag] = 1;
if ( array_sum($advance) == count($advance) ) {
$advance = array(
'Customer' => 0,
'Name' => 0,
'Site' => 0
);
uksort($customers[$j], 'sortCustomerKeys');
$j++;
}
}
}
var_dump($customers);