ksort () выдаёт неверный результат

Исходный массив такой:

Array
(
[Danmark] => Country Object
(
[id:protected] => 39
[name:protected] => Danmark
[code:protected] => DK
[stringIndex:protected] => DENMARK
)

[Tyskland] => Country Object
(
[id:protected] => 59
[name:protected] => Tyskland
[code:protected] => DE
[stringIndex:protected] => GERMANY
)

[Irland] => Country Object
(
[id:protected] => 78
[name:protected] => Irland
[code:protected] => IE
[stringIndex:protected] => IRELAND
)

[Italien] => Country Object
(
[id:protected] => 81
[name:protected] => Italien
[code:protected] => IT
[stringIndex:protected] => ITALY
)

[Holland] => Country Object
(
[id:protected] => 119
[name:protected] => Holland
[code:protected] => NL
[stringIndex:protected] => NETHERLANDS
)

[Nya Zeeland] => Country Object
(
[id:protected] => 122
[name:protected] => Nya Zeeland
[code:protected] => NZ
[stringIndex:protected] => NEW_ZEALAND
)

[Polen] => Country Object
(
[id:protected] => 138
[name:protected] => Polen
[code:protected] => PL
[stringIndex:protected] => POLAND
)

[Spanien] => Country Object
(
[id:protected] => 161
[name:protected] => Spanien
[code:protected] => ES
[stringIndex:protected] => SPAIN
)

[Sverige] => Country Object
(
[id:protected] => 166
[name:protected] => Sverige
[code:protected] => SE
[stringIndex:protected] => SWEDEN
)

[Schweiz] => Country Object
(
[id:protected] => 167
[name:protected] => Schweiz
[code:protected] => CH
[stringIndex:protected] => SWITZERLAND
)

[England] => Country Object
(
[id:protected] => 185
[name:protected] => England
[code:protected] => GB
[stringIndex:protected] => UNITED_KINGDOM
)

[Osterrike] => Country Object
(
[id:protected] => 197
[name:protected] => Osterrike
[code:protected] => AT
[stringIndex:protected] => AUSTRIA
)

[Belgien] => Country Object
(
[id:protected] => 236
[name:protected] => Belgien
[code:protected] => BE
[stringIndex:protected] => BELGIUM
)

)

И после того, как я позвоню:

ksort($countries, SORT_STRING);

Я получаю это:

Array
(
[Osterrike] => Country Object
(
[id:protected] => 197
[name:protected] => Osterrike
[code:protected] => AT
[stringIndex:protected] => AUSTRIA
)

[Belgien] => Country Object
(
[id:protected] => 236
[name:protected] => Belgien
[code:protected] => BE
[stringIndex:protected] => BELGIUM
)

[Danmark] => Country Object
(
[id:protected] => 39
[name:protected] => Danmark
[code:protected] => DK
[stringIndex:protected] => DENMARK
)

[Tyskland] => Country Object
(
[id:protected] => 59
[name:protected] => Tyskland
[code:protected] => DE
[stringIndex:protected] => GERMANY
)

[Irland] => Country Object
(
[id:protected] => 78
[name:protected] => Irland
[code:protected] => IE
[stringIndex:protected] => IRELAND
)

[Italien] => Country Object
(
[id:protected] => 81
[name:protected] => Italien
[code:protected] => IT
[stringIndex:protected] => ITALY
)

[Holland] => Country Object
(
[id:protected] => 119
[name:protected] => Holland
[code:protected] => NL
[stringIndex:protected] => NETHERLANDS
)

[Nya Zeeland] => Country Object
(
[id:protected] => 122
[name:protected] => Nya Zeeland
[code:protected] => NZ
[stringIndex:protected] => NEW_ZEALAND
)

[Polen] => Country Object
(
[id:protected] => 138
[name:protected] => Polen
[code:protected] => PL
[stringIndex:protected] => POLAND
)

[Spanien] => Country Object
(
[id:protected] => 161
[name:protected] => Spanien
[code:protected] => ES
[stringIndex:protected] => SPAIN
)

[Sverige] => Country Object
(
[id:protected] => 166
[name:protected] => Sverige
[code:protected] => SE
[stringIndex:protected] => SWEDEN
)

[Schweiz] => Country Object
(
[id:protected] => 167
[name:protected] => Schweiz
[code:protected] => CH
[stringIndex:protected] => SWITZERLAND
)

[England] => Country Object
(
[id:protected] => 185
[name:protected] => England
[code:protected] => GB
[stringIndex:protected] => UNITED_KINGDOM
)

)

Когда я тестирую его с теми же индексами, но со значениями простых строк вместо моего Country объекты, это сортирует правильно. Когда я тестирую его с теми же индексами, но с пустым Test объекты вместо моего Country объекты, опять же, он сортирует правильно. Но в данном конкретном случае он возвращает неверный результат. Они также не сортируются по каким-либо значениям внутри объекта, все значения кажутся случайными.

Country класс предельно прост:

class Country {

protected $id;
protected $name;
protected $code;
protected $stringIndex;

}

Что может быть причиной?

1

Решение

Публикация в качестве ответа, так как это будет очень уродливо в качестве комментария:

Я не могу дублировать ваши O впереди:

код:

<?php

$foo = array(
'P' => 'regular p',
'Ö' => 'umlaut o',
'O' => 'regular o',
'A' => 'regular A'
);

var_dump ($ Foo);
ksort ($ Foo);
var_dump ($ Foo);

Результат:

array(4) {
["P"]=>
string(9) "regular p"["Ö"]=>
string(8) "umlaut o"["O"]=>
string(9) "regular o"["A"]=>
string(9) "regular A"}
array(4) {
["A"]=>
string(9) "regular A"["O"]=>
string(9) "regular o"["P"]=>
string(9) "regular p"["Ö"]=>
string(8) "umlaut o"}

Как видите, Ö сортирует неправильно, но сортирует по КОНЦУ массива, а не по началу.

0

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

Я думаю, что мой ответ слишком поздно, но похоже, что массив отсортирован по stringIndex поле Country Object.

Может быть (просто может быть, Я точно не знаю) из-за флага SORT_STRING ksort пытается найти элементы с string типа, но если это не удалось, то он пытается найти ключи с ключевым словом «строка», как stringIndex в стране объекта.

-1

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