【问题标题】:Trying to use usort with strcmp to sort objects by property尝试使用 usort 和 strcmp 按属性对对象进行排序
【发布时间】:2015-02-03 16:44:28
【问题描述】:

看着this post,它看起来很简单,但我无法让它工作。

我构建了一个这样的对象数组:

objs = array();
loop..
$obj = array(
    "prop1" => 'cccc a a a a 32423f sdf',
    "prop2" => 'sdlkfjsldkfj',
    "prop3" => 'slkfjs93s3jfsl'
);
$Objs[] = $obj2;

然后我尝试在属性上按字母顺序对对象进行排序:

function cmp($a, $b) {
    return strcasecmp($a->prop1, $b->prop1);
}
usort($fileObjs, "cmp");

但它不会按字母顺序对它们进行排序,不确定我哪里出错了。这是一个完整的例子:

$objs = array();
$obj1 = array(
    "prop1" => 'aaaa a a a a 32423f sdf',
    "prop2" => 'sdlkfjsldkfj',
    "prop3" => 'slkfjs93s3jfsl'
); 
$obj2 = array(
    "prop1" => 'bbb a a a a 32423f sdf',
    "prop2" => 'sdlkfjsldkfj',
    "prop3" => 'slkfjs93s3jfsl'
); 
$obj3 = array(
    "prop1" => 'cccc a a a a 32423f sdf',
    "prop2" => 'sdlkfjsldkfj',
    "prop3" => 'slkfjs93s3jfsl'
); 
$objs[] = $obj2;
$objs[] = $obj1;
$objs[] = $obj3;

function cmp($a, $b) {
    return strcasecmp($a->prop1, $b->prop1);
}
usort($objs, "cmp");
var_dump($objs);

结果输出:

array(3) {
  [0]=>
  array(3) {
    ["prop1"]=>
    string(23) "cccc a a a a 32423f sdf"
    ["prop2"]=>
    string(12) "sdlkfjsldkfj"
    ["prop3"]=>
    string(14) "slkfjs93s3jfsl"
  }
  [1]=>
  array(3) {
    ["prop1"]=>
    string(23) "aaaa a a a a 32423f sdf"
    ["prop2"]=>
    string(12) "sdlkfjsldkfj"
    ["prop3"]=>
    string(14) "slkfjs93s3jfsl"
  }
  [2]=>
  array(3) {
    ["prop1"]=>
    string(22) "bbb a a a a 32423f sdf"
    ["prop2"]=>
    string(12) "sdlkfjsldkfj"
    ["prop3"]=>
    string(14) "slkfjs93s3jfsl"
  }
}

【问题讨论】:

    标签: php sorting strcmp usort


    【解决方案1】:

    您的对象和数组对象似乎令人困惑。您的 cmp 函数正在比较数组对象中不存在的属性。

    如果你:

    echo "comparing {$a->prop1} vs {$b->prop1}";
    

    在 cmp 方法中,您会注意到 prop1 为空。

    您可以通过像这样引用数组索引来修复您的代码

    function cmp($a, $b) {
        return strcasecmp($a['prop1'], $b['prop1']);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 2016-02-08
      • 2013-02-12
      • 2023-04-03
      相关资源
      最近更新 更多