Попытка использовать usort с strcmp для сортировки объектов по свойству

Смотря на эта почта это казалось довольно прямым, но я не могу заставить это работать.

Я строю массив объектов, как это:

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"}
}

-1

Решение

Похоже, ваши запутанные объекты и массивы объектов. Ваша функция cmp сравнивает свойства, которые не существуют в ваших объектах массивов.

если ты :

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

в методе cmp вы заметите, что prop1 нулевые.

Вы можете исправить свой код, ссылаясь на индекс массива следующим образом

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]