Сортировать многомерный массив объектов

0

Я видел так много примеров в stackoverflow для сортировки многомерного массива объекта, например

Сортировка массива объектов

Сортировка массива объектов по полям объекта

Но ни один из них не мог помочь мне отсортировать мой многомерный массив объектов, приведенный ниже

SimpleXMLElement Object
(
    [request] => SimpleXMLElement Object
        (
            [address] => test
            [citystatezip] => New York
        )

    [message] => SimpleXMLElement Object
        (
            [text] => Request successfully processed
            [code] => 0
        )

    [response] => SimpleXMLElement Object
        (
            [results] => SimpleXMLElement Object
                (
                    [result] => Array
                        (
                            [0] => SimpleXMLElement Object
                                (
                                    [zpid] => 27965224
                                    [links] => SimpleXMLElement Object
                                        (
                                            [homedetails] => test
                                            [graphsanddata] =>test
                                            [mapthishome] => test
                                            [comparables] => test
                                        )

                                    [address] => SimpleXMLElement Object
                                        (
                                            [street] => test
                                            [zipcode] => test
                                            [city] => test
                                            [state] => NY
                                            [latitude] => 29.802114
                                            [longitude] => -95.504244
                                        )

                                    [zestimate] => SimpleXMLElement Object
                                        (
                                            [amount] => 342911
                                            [last-updated] => 11/27/2014
                                            [oneWeekChange] => SimpleXMLElement Object
                                                (
                                                    [@attributes] => Array
                                                        (
                                                            [deprecated] => true
                                                        )

                                                )

                                            [valueChange] => 5766
                                            [valuationRange] => SimpleXMLElement Object
                                                (
                                                    [low] => 312049
                                                    [high] => 373773
                                                )

                                            [percentile] => 0
                                        )
                                    [rentzestimate] => SimpleXMLElement Object
                                        (
                                            [amount] => 5177
                                            [last-updated] => 11/24/2014
                                            [oneWeekChange] => SimpleXMLElement Object
                                                (
                                                    [@attributes] => Array
                                                        (
                                                            [deprecated] => true
                                                        )

                                                )

                                            [valueChange] => 370
                                            [valuationRange] => SimpleXMLElement Object
                                                (
                                                    [low] => 3417
                                                    [high] => 7041
                                                )

                                        )
                                    [localRealEstate] => SimpleXMLElement Object
                                        (
                                            [region] => SimpleXMLElement Object
                                                (
                                                    [@attributes] => Array
                                                        (
                                                            [id] => 271582
                                                            [type] => neighborhood
                                                            [name] => test
                                                        )

                                                    [links] => SimpleXMLElement Object
                                                        (
                                                            [overview] => test
                                                            [forSaleByOwner] => test
                                                            [forSale] => test
                                                        )
                                                )
                                        )
                                )
                                [1] => SimpleXMLElement Object
                                [2] => SimpleXMLElement Object
                                [3] => SimpleXMLElement Object
                                ..............................
                                ..............................
                        )                            
                )
        )
)

Мне нужно, чтобы отсортировать массив выше на основе ключа суммы в порядке убывания. Но проблема заключается в том, что ключ суммы существует под двумя разными родительскими ключами "zestimate" и "rentzestimate".

Я пробовал следующую функцию, но она не работала:

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

Любая помощь?

заранее спасибо

  • 0
    Не могли бы вы уточнить, пожалуйста: вы хотите отсортировать response->results->result ?
  • 0
    Пожалуйста, предоставьте пример вашего результата на основе предоставленного входного примера.
Показать ещё 4 комментария
Теги:
object
multidimensional-array
sorting

1 ответ

2

response->results->result - массив объектов SimpleXMLElement. Вы хотите отсортировать массив на основе внутреннего zestimate->amount элемента в порядке убывания.

Вы должны написать функцию сравнения, которая принимает объекты SimpleXMLElement и, поскольку вы хотите убывающий порядок, возвращает 1 если zestimate->amount первого объекта меньше, чем у второго, -1 если оно больше, и 0 если он равен:

public function my_comparison(SimpleXMLElement $a, SimpleXMLElement $b) {
    if ($a->zestimate->amount == $b->zestimate->amount) {
        return 0;
    }
    return ($a->zestimate->amount < $b->zestimate->amount) ? 1 : -1; // note the signs
}
  • 0
    как бы отсортировать весь массив в порядке исключения на основе zestimate-> amount
  • 0
    Я обновил свой ответ, чтобы уточнить это. Обратите особое внимание на признаки результата функции my_comparison .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню