Home > database >  Problem with Collection::sortBy() in cakephp 4
Problem with Collection::sortBy() in cakephp 4

Time:07-27

I'm trying to sort a list of email accounts by alphabetical order using Collection::sortBy() in cakephp 4, but it seems not working the way I use it.

$accounts = [
          [
            'email' => '[email protected]',
            'isBlocked' => false,
          ],
          [
            'email' => '[email protected]',
            'isBlocked' => false,
          ],
          [
            'email' => '[email protected]',
            'isBlocked' => false,
          ],
          [
            'email' => '[email protected]',
            'isBlocked' => false,
          ],
          [
            'email' => '[email protected]',
            'isBlocked' => false,
          ]
        ];

$sorted = collection($accounts)
            ->sortBy('email', SORT_ASC)
            ->toArray();

debug($sorted);

debug($sorted) returns exactly the same array as $accounts...

What am I doing wrong ?

CodePudding user response:

The default sort type is SORT_NUMERIC, and converted to numbers, all your strings will be 0, hence all are equal as seen by the sorting mechanism, and nothing will chance.

For strings use SORT_NATURAL, SORT_STRING, SORT_LOCALE_STRING, or SORT_REGULAR, eg:

sortBy('email', SORT_ASC, SORT_NATURAL)

The Cookbook needs a fix there I think, as it shows referencing string fields without specifying the required sort type.

See also

  • Related