PHP通过两个属性对对象数组进行排序

用户名

我有一个数组

Array
(
[0] => stdClass Object
    (
        [tab_option_name_selector] => 2
        [fieldtype] => notes
        [order] => 12
    )

[1] => stdClass Object
    (
        [tab_option_name_selector] => 2
        [fieldtype] => notes
        [order] => 8
    )

[2] => stdClass Object
    (
        [tab_option_name_selector] => 1
        [order] => 2
        [fieldtype] => selectbox
    )

[3] => stdClass Object
    (
        [tab_option_name_selector] => 2
        [order] => 3
        [fieldtype] => selectbox
    )
)

我正在尝试使此usort函数正常工作

function osort(&$array, $props) 
{ 
    if(!is_array($props)) 
        $props = array($props => true); 

    $me = usort($array, function($a, $b) use ($props) { 
        foreach($props as $prop => $ascending) 
        { 
            if($a->$prop != $b->$prop) 
            { 
                if($ascending) 
                    return $a->$prop > $b->$prop ? 1 : -1; 
                else 
                    return $b->$prop > $a->$prop ? 1 : -1; 
            } 
        } 
        return -1; //if all props equal        
    });    
    print_r($props);
    return ($me);
} 


$tab = osort($objectArray, "tab_option_name_selector", "order"); 

因此按标签排序然后排序。

$ tab为空-有什么想法我做错了吗?

Mike'Pomax'Kamermans

为什么要增加间接级别并使事情变得更加混乱?为什么不直接usort($objectArray, "sortObjects");使用sortObjects($a,$b)函数执行比较器所进行的操作:根据输入返回负数/ 0 /正数?

如果选项卡不同,则返回它们的比较;如果相同,则返回订单比较;完成。

$array = array(
    (object)array(
        'tab_option_name_selector' => 2,
        'fieldtype' => 'notes',
        'order' => 12
    ),
    (object)array(
        'tab_option_name_selector' => 2,
        'fieldtype' => 'notes',
        'order' => 8
    ),
    (object)array(
        'tab_option_name_selector' => 1,
        'order' => 2,
        'fieldtype' => 'selectbox'
    ),
    (object)array(
        'tab_option_name_selector' => 2,
        'order' => 3,
        'fieldtype' => 'selectbox'
    )
);

function compareTabAndOrder($a, $b) {
    // compare the tab option value
    $diff = $a->tab_option_name_selector - $b->tab_option_name_selector;
    // and return it. Unless it's zero, then compare order, instead.
    return ($diff !== 0) ? $diff : $a->order - $b->order;
}

usort($array, "compareTabAndOrder");
print_r($array);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过比较javascript中的两个对象来对对象进行分类

按嵌套对象的一个属性对对象数组进行排序

根据另一个对象数组的属性对对象数组进行排序

按两个属性对对象数组进行排序

按属性对对象数组进行排序

swift-通过可选的boolean属性对对象数组进行排序,而无需强制展开

通过两个不同的条件对数组中的对象进行排序

如何通过其布尔属性对对象数组进行排序

使用两个条件对对象的向量进行排序

通过两个变量对多维数组进行排序

如何通过两个属性和排序规则对对象列表进行排序

根据两个属性的值对数组中的对象进行排序

通过查看另一个数组顺序对对象数组进行排序

Swift-按另一个数组的属性对对象数组进行排序

如何使用两个属性对对象数组进行排序,但根据条件有条件地按排序顺序分组?

通过两个不同的属性对项目进行排序

通过另一个对象数组对对象进行排序

如何按其两个属性的降序对对象数组进行排序

通过变量obj属性对对象数组进行排序

按2个属性对对象数组进行排序

如何通过两个不同的值对对象数组进行排序

按日期的2个属性对对象数组进行排序

如何通过嵌套对象属性对 PHP 对象数组进行排序?

如何根据两个属性对对象数组进行分组

如何在不连续重复 Javascript 中的两个特定属性的情况下对对象数组进行排序?

如何根据对象的属性通过递增顺序对对象数组进行排序 - Swift

是否可以按另一个对象的属性对对象数组进行排序?

通过具有附加约束的多个属性对对象数组进行排序

如何按属性 PHP 对对象数组进行排序