2012-05-11 36 views
0

我有一个对象数组,每个对象都有一个索引:object-> index,它是一个正整数。如何通过每个对象内的索引对对象数组进行排序?

我有第二个数组,每个条目都是一个索引,唯一对应于object-> index之一。我想排序对象的第一个数组,以便它们与第二个数组索引的顺序相同。

这有道理吗?

谢谢。

+0

显示一些代码 –

+0

的,所以你有一个数组(“1” =>对象 - >索引{= 1},“2” =>对象 - > index {= 2}),{}内的内容是您的索引值。你有第二个结构相同的数组,你想排序一个数组与另一个数组的顺序相同吗? – Churk

回答

1

我会翻转你的第二个阵列(array_flip),这样就可以更容易地查找对象的所需位置。然后就可以通过将对象只是迭代像这样:

$indices = array_flip($second_array); 
$sorted_objects = array(); 
foreach ($objects as $object) { 
    $sorted_objects[$indices[$object->index]] = $object; 
} 
+0

+1或者使用'array_search()'。可能还需要'ksort($ sorted_objects);'以后可以按照所需的顺序迭代。 – Wiseguy

+0

谢谢!这工作。 Wiseguy也是正确的,之后需要一个ksort。 –

+0

@Hardworker,或者你可以做'$ sorted_objects = array_fill(0,count($ objects),NULL);'这样对象将被插入到适当的位置而不是附加(我认为PHP会将它们插入正确的如果键是数字,但显然不是)。 – Brian

0
$objArray = ...; 
$sortArray = ...; 
$newArray = array(); // the sorted array 

foreach($sortArray as $index) 
{ 
    foreach($objArray as $obj) 
    { 
    if($obj->index === $index) 
    { 
     $newArray[] = $obj; 
     break; 
    } 
    } 
} 

是什么?

0

检出usort(http://au.php.net/manual/en/function.usort.php):这允许你通过指定一个函数来排序数组。该函数将获得对象的索引。

function cmp($obj1, $obj2) { 

    if ($obj1->index == $obj2->index) { 
     return 0; 
    } 
    return ($obj1->index < $obj2->index) ? -1 : 1; 
} 

usort($aObjects, "cmp"); 
相关问题