2012-01-12 78 views
0

我有一个对象的结构,像这样:抓住的第一个元素中的对象(PHP)

Array 
( 
    [0] => SimpleXMLElement Object ([0] => Europe) 
    [1] => SimpleXMLElement Object ([0] => South America) 
    [3] => SimpleXMLElement Object ([0] => North America) 
    [4] => SimpleXMLElement Object ([0] => Asia) 
) 

我试图对象按字母顺序排序。我已经尝试对整个数组使用sort(),但它不起作用。我假设它只是抓住对象的名称,这在所有情况下都是一样的,并将其排序。我试图访问每个对象内的文本,但似乎无法将它带入'SimpleXMLElement Object()'文本中。我将如何访问该文本并可能仅使用文本值重新创建一个新数组?

编辑:我已经试过如下:

$区=排序($区); $ regions = usort($ regions);

谢谢!

+0

你试过用usort()吗? – 2012-01-12 14:33:38

+0

是的,它给出了相同的结果 – jasonaburton 2012-01-12 14:36:42

+0

关于usort的一点是给它一个自定义的排序功能:http://www.php.net/manual/en/function.usort.php – Damien 2012-01-12 14:39:38

回答

3

您可以使用:

<?php 
function pony_sorting($a, $b) 
{ 
    if ((string)$a[0] == (string)$b[0) { 
     return 0; 
    } 
    return ((string)$a[0] < (string)$b[0]) ? -1 : 1; 
} 

usort($a, "pony_sorting"); 

这将让你的阵列的数据结构。但是,如果你不关心你的SimpleXML元素,只需将它导出为一个干净的,更高效的内存数组。

$clean = array(); 
foreach ($a as $simplexml) 
{ 
    $clean[] = (string)$simplexml[0]; 
} 

注意(字符串)强制转换,允许获取s​​impleXmlElement的实际值。

+0

我大多只是在重新创建只有值的数组,没有对象,所以我使用你提供的代码的后半部分,然后在该数组上使用简单的sort()。谢谢! – jasonaburton 2012-01-12 14:43:13