сортировка массива json по значению в php - PullRequest
0 голосов
/ 07 мая 2018

У меня есть JSON-массивы объектов. Я пытаюсь отсортировать массив с помощью usort. Я хочу использовать value поле из field_listing_order. Сортировка по значению. Я что-то упускаю, но не могу понять это. пожалуйста, ознакомьтесь с кодом. Спасибо!

stdClass Object
(
    [node_title] => abc
    [nid] => 2281
    [field_api_order_value] => 201
    [field_node_entity_type] => node
    [_data] => Array
        (
            [nid] => Array
                (
                    [entity_type] => node
                    [entity] => stdClass Object
                        (

                            [title] => abc
                            [field_listing_order] => Array
                                (
                                    [und] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [value] => 8
                                                    [format] => 
                                                    [safe_value] => 8
                                                )

                                        )

                                )

                       )

                 )

        )

)

stdClass Object
(
    [node_title] => abc
    [nid] => 2243
    [field_api_order_value] => 204
    [field_node_entity_type] => node
    [_data] => Array
        (
            [nid] => Array
                (
                    [entity_type] => node
                    [entity] => stdClass Object
                        (

                            [title] => abc
                            [field_listing_order] => Array
                                (
                                    [und] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [value] => 3
                                                    [format] => 
                                                    [safe_value] => 3
                                                )

                                        )

                                )

                       )

                 )

        )

) stdClass Object
(
    [node_title] => abc
    [nid] => 2431
    [field_api_order_value] => 242
    [field_node_entity_type] => node
    [_data] => Array
        (
            [nid] => Array
                (
                    [entity_type] => node
                    [entity] => stdClass Object
                        (

                            [title] => abc
                            [field_listing_order] => Array
                                (
                                    [und] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [value] => 1
                                                    [format] => 
                                                    [safe_value] => 1
                                                )

                                        )

                                )

                       )

                 )

        )

)

и так далее ...

  foreach ($view->result as $result) {   
        $node = $result->_data['nid']['entity'];  
        $listing_order = $node->field_listing_order[LANGUAGE_NONE][0];
         .....            
       // code goes here and it works well. sorting issue
}

 usort ($node->field_listing_order[LANGUAGE_NONE][0], function($a, $b){
       return strcmp($a->value, $b->value);
   }); ?>

1 Ответ

0 голосов
/ 07 мая 2018

Если вам нужно отсортировать все узлы, используя значение field_listing_order, вам нужно сравнить значения по полному пути, от первого объекта до значения:

usort($view->result, function($a, $b) {
    $la = $a->_data['nid']['entity']->field_listing_order[LANGUAGE_NONE][0]['value'];
    $lb = $b->_data['nid']['entity']->field_listing_order[LANGUAGE_NONE][0]['value'];
    return $la - $lb ;
});

В этом случае $a и $b - это два разных узла, которые можно сравнивать. Вот почему вы должны сравнить значение field_listing_order этих узлов. Ответ работает с $la- $lb

...