Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象数组上的PHP usort函数不工作_Php_Arrays_Usort - Fatal编程技术网

对象数组上的PHP usort函数不工作

对象数组上的PHP usort函数不工作,php,arrays,usort,Php,Arrays,Usort,我有以下对象数组: array ( 0 => MyObject::__set_state(array( 'id' => '1176', 'value' => 'Oranges', )), 1 => MyObject::__set_state(array( 'id' => '1178', 'value' => 'Bananas', )), 2 => MyObject::__se

我有以下对象数组:

 array (
   0 => MyObject::__set_state(array(
      'id' => '1176',
      'value' => 'Oranges',
   )),
   1 => MyObject::__set_state(array(
      'id' => '1178',
      'value' => 'Bananas',
   )),
   2 => MyObject::__set_state(array(
      'id' => '1179',
      'value' => 'grapes',
   )),
 )
我想按值升序排序,因此我使用以下方法:

usort($myObjectArray, function($a, $b) {
    return strcmp($a->value, $b->value);
});  
但我很抱歉什么都没有排序?

您可以这样做:

function cmp($a, $b) {
    return strcmp($a->value, $b->value);
}); 
usort($myObjectArray,"cmp");

在PHP7中,您可以在比较函数中使用

我只是用下面的代码对它进行了测试,它按照您的预期工作,无需使案例统一

注意:我刚刚通过铸造数组创建了一个
stdClass
对象数组

$objArr=[
(对象)[
'id'=>'1176',
'value'=>'Oranges',
],
(对象)[
'id'=>'1178',
“值”=>“香蕉”,
],
(对象)[
'id'=>'1179',
'值'=>'葡萄',
],
];
usort($objArr,函数($a,$b){
//使用return$b->value$a->value;
//颠倒顺序
返回$a->value$b->value;
});
其结果如下:

usort($myObjectArray, function($a, $b) {
    return strcmp($a->value, $b->value);
});  
print\r($objArr);
排列
(
[0]=>stdClass对象
(
[id]=>1178
[值]=>香蕉
)
[1] =>stdClass对象
(
[id]=>1176
[值]=>橙子
)
[2] =>stdClass对象
(
[id]=>1179
[价值]=>葡萄
)
)

如果案例是一个问题(即葡萄和葡萄应该被分类),那么这很有用。

您可以尝试下面的代码。我检查了它的工作是否正常:

class MyObject
{
    public $id;
    public $value;
}

$a = [];

$ob = new MyObject();
$ob->id = '1176';
$ob->value = 'Lemons';

$ob2 = new MyObject();
$ob2->id = '1178';
$ob2->value = 'apples';

$ob3 = new MyObject();
$ob3->id = '1179';
$ob3->value = 'grapes';

$a[] = $ob;
$a[1] = $ob2;
$a[2] = $ob3;

usort( $a, function($a, $b) {
    return strcmp(mb_strtolower($a->value), mb_strtolower($b->value));
});


print_r($a);
输出:

Array
(
    [0] => MyObject Object
        (
            [id] => 1178
            [value] => apples
        )

    [1] => MyObject Object
        (
            [id] => 1179
            [value] => grapes
        )

    [2] => MyObject Object
        (
            [id] => 1176
            [value] => Lemons
        )

)

您还可以检查-

是否可以显示一个
打印($myObjectArray)
请在其上显示一个类似于方法调用数组的演示?请确保在比较之前将它们转换为统一大小写<代码>返回strcmp(strtolower($a->值),strtolower($b->值))@vivek_23是的,我刚刚检查过,这就是问题所在。请对您的答案添加一些解释-是什么让您认为这种行为有所不同?