如何按每个对象内的索引对对象数组进行排序


How to sort an array of objects by index inside each object?

我有一个对象数组,每个对象都有一个索引:object->index,这是一个正整数。

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

这有意义吗?

谢谢。

我会翻转你的第二个数组(array_flip),以便你可以更容易地查找对象的所需位置。 然后,您可以像这样遍历对象:

$indices = array_flip( $second_array );
$sorted_objects = array();
foreach ( $objects as $object ) {
  $sorted_objects[$indices[$object->index]] = $object;
}
$objArray = ...;
$sortArray = ...;
$newArray = array(); // the sorted array
foreach( $sortArray as $index )
{
  foreach( $objArray as $obj )
  {
    if( $obj->index === $index )
    {
      $newArray[] = $obj;
      break;
    }
  }
}

喜欢这个?

查看 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");