【问题标题】:sorting three dimensional array of stdclass objects in php在php中对stdclass对象的三维数组进行排序
【发布时间】:2015-11-02 06:03:38
【问题描述】:

我在排序该数组时遇到问题,我尝试了几种不同的 usort 方法,但似乎没有任何效果。 我想通过“vieworder”订购它。 打印它我使用了 array_values() 函数 这是数组:

 Array
(
    [0] => Array
        (
            [0] => stdClass Object
                (
                    [name] => 1.png
                    [size] => 673478
                    [url] => files/1.png
                    [thumbnailUrl] => files/thumbnail/1.png
                    [deleteUrl] => uploads/index.php?file=1.png&_method=DELETE
                    [deleteType] => POST
                    [id] => 17
                    [type] => image/png
                    [title] => test
                    [vieworder] => 1
                )

            [1] => stdClass Object
                (
                    [name] => 10.png
                    [size] => 151629
                    [url] => files/10.png
                    [thumbnailUrl] => files/thumbnail/10.png
                    [deleteUrl] => uploads/index.php?file=10.png&_method=DELETE
                    [deleteType] => POST
                    [id] => 16
                    [type] => image/png
                    [title] => test10
                    [vieworder] => 10
                )

            [2] => stdClass Object
                (
                    [name] => 11.png
                    [size] => 682790
                    [url] => files/11.png
                    [thumbnailUrl] => files/thumbnail/11.png
                    [deleteUrl] => uploads/index.php?file=11.png&_method=DELETE
                    [deleteType] => POST
                    [id] => 18
                    [type] => image/png
                    [title] => test
                    [vieworder] => 5
                )

            [3] => stdClass Object
                (
                    [name] => 2.png
                    [size] => 118038
                    [url] => files/2.png
                    [thumbnailUrl] => files/thumbnail/2.png
                    [deleteUrl] => uploads/index.php?file=2.png&_method=DELETE
                    [deleteType] => POST
                    [id] => 15
                    [type] => image/png
                    [title] => test2
                    [vieworder] => 2
                )

            [4] => stdClass Object
                (
                    [name] => 5.png
                    [size] => 496543
                    [url] => files/5.png
                    [thumbnailUrl] => files/thumbnail/5.png
                    [deleteUrl] => uploads/index.php?file=5.png&_method=DELETE
                    [deleteType] => POST
                    [id] => 14
                    [type] => image/png
                    [title] => test2
                    [vieworder] => 2
                )

        )

)

谢谢!

【问题讨论】:

    标签: php arrays stdclass


    【解决方案1】:

    假设你的数据结构是这样的:

    $std_one = new stdClass();
    $std_one->id = 3;
    $std_one->name = 123;
    $std_one->vieworder = 13;
    
    $std_two = new stdClass();
    $std_two->id = 1;
    $std_two->name = 4;
    $std_two->vieworder = 1;
    
    $std_three = new stdClass();
    $std_three->id = 1;
    $std_three->name = 4;
    $std_three->vieworder = 2;
    
    $std_four = new stdClass();
    $std_four->id = 1;
    $std_four->name = 4;
    $std_four->vieworder = 3;
    
    // Data array which needs to be sorted according to vieworder property.
    $data[0][] = $std_one; 
    $data[0][] = $std_two;
    $data[0][] = $std_three;
    $data[0][] = $std_four;
    
    // Passing $data[0] variable in to our callback function sortStdClass
    usort($data[0],'sortStdClass');
    
    // Finally sortStdClass callback function
    
    function sortStdClass($a, $b){
       return $a->vieworder > $b->vieworder; // Sort in ASC order
    }
    
    // Print $data;
    echo '<pre>'.print_r($data,1).'</pre>';
    // Prints:
        Array
    (
        [0] => Array
            (
                [0] => stdClass Object
                    (
                        [id] => 1
                        [name] => 4
                        [vieworder] => 1
                    )
    
                [1] => stdClass Object
                    (
                        [id] => 1
                        [name] => 4
                        [vieworder] => 2
                    )
    
                [2] => stdClass Object
                    (
                        [id] => 1
                        [name] => 4
                        [vieworder] => 3
                    )
    
                [3] => stdClass Object
                    (
                        [id] => 1
                        [name] => 4
                        [vieworder] => 10
                    )
    
            )
    
    )
    

    【讨论】:

      【解决方案2】:

      更新: 我终于想通了: 因为对 usort 函数的调用是从类内部进行的,所以 usort 方法应该是私有静态的,并且调用应该包含 this。

      usort($content[0], array($this, "sortStdClass"));
      
      private static function sortStdClass($a, $b){
          return $a->vieworder > $b->vieworder; // Sort in ASC order
      }
      

      【讨论】:

        猜你喜欢
        • 2012-06-23
        • 2011-12-30
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 2015-01-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多