I am using this to sort according to last name:
usort($fb_friends['data'], "custom_sort");
function custom_sort($a,$b) {
return $a['last_name']>$b['last_name'];
}
foreach($fb_friends['data'] as $friend) {
echo '<br>';
echo $friend['name'];
}
But - when in last name is accent, e.g. Šiko, Áron, etc, these names are at the end. How can I sort it properly?
Use multi-byte string functions. There is a function called strcoll
which seems to suit your needs.
More info:
EDIT: added Peter's working code, below
setlocale(LC_COLLATE, 'sk_SK.utf8');
usort($fb_friends['data'], 'custom_sort');
function custom_sort($a, $b) {
return strcoll ($a['last_name'], $b['last_name']);
}
foreach ($fb_friends['data'] as $friend) {
echo '<br>';
echo $friend['name'];
}
What comes first?
This is defined by a Collation.
PHP has the Collator class for this: https://www.php.net/manual/en/class.collator.php
Example:
$array = [ 'A', 'a', '文', 'ث' ];
// Brazilian Portuguese
$collator = new Collator('pt_BR');
$collator->asort( $array );
print_r( $array );
Returns:
Array
(
[1] => a
[0] => A
[3] => ث
[2] => 文
)
Now with a Chinese collation new Collator('zh')
:
Array
(
[2] => 文
[1] => a
[0] => A
[3] => ث
)
You can try it yourself here: https://3v4l.org/0vsBR
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With