2012-01-30 3 views
1

У меня есть массив объектов города, а затем другой объект (City), который содержит вид для первого объекта.PHP Сортировка массива объекта на основе других атрибутов объекта

Class City 
{ 
    $id 
    $name 
    $towns 
    $town_id_order 
    //etc 
} 

Class Town 
    { 
     $id 
     $name 
     //etc 
    } 

Так что мне нужно, чтобы иметь возможность сортировать город, основанный на города-> town_id_order

Я предполагаю, что это usort, но я не могу заставить его работать с объектами как сорт.

Это то, что я пробовал, но возвращает «Ожидает массива не строку»

function cmp($a, $b) 
    { 
     if ($a == $this->towns) { 
      return 0; 
     } 
     return ($a < $this->towns) ? -1 : 1; 
    } 

    $a = $this->getTownsOrder(); 

    usort($a, "cmp"); 
+0

Вперед и отправьте то, что вы пробовали. Мы сможем помочь вам с любыми проблемами. – jprofitt

+0

Обратный вызов usort получит два объекта в качестве аргументов. Возможно, вы могли бы опубликовать то, что вы пробовали. –

ответ

1

простой Еогеасп будет соответствовать вашим потребностям.

$ret = array(); 
$town_id_order = $city->town_id_order; 
foreach ($towns as $town) { 
    $ret[array_search($town->id, $town_id_order)] = $town; 
} 
+0

Это был маршрут я взял, но поставил ее в публичную функцию в классе, то назвал его от другого метода. Благодарю. – BobFlemming

1
function cmp($a, $b) 
{ 
    if ($a->towns == $b->towns) { 
     return 0; 
    } 
    return ($a->towns < $b->towns) ? -1 : 1; 
} 

Я пытаюсь получить чувство для вашего кода, но я думаю, что выше будет работать.

+0

Спасибо, все еще получает «Warning: usort() ожидает параметр 1, чтобы быть массивом, строка, заданный» с этим. – BobFlemming

+0

Это означает, что ваш 'getTownsOrder()' функция возвращает строку, а не массив. –

Смежные вопросы