dimagolov
Новичок
PHP:
usort($array, 'strcasecmp');
http://forum.dklab.ru/viewtopic.php?t=36369
usort($array, 'strcasecmp');
— это неудивительно.Автор оригинала: dimagolov
только работать будет только для однобайтных кодировок:
http://forum.dklab.ru/viewtopic.php?t=36369
$two_forarray = $forarray;
foreach($forarray as $key=>$value) {
$value[$key] = strtolower($value);
}
asort($forarray);
foreach($forarray as $key=>$value) {
$value[$key] = $two_forarray[$key];
}
function utf8_ord($c)
{
switch( strlen($c) )
{
case 1:
return ord($c);
break;
case 2:
return ((ord($c[0]) & 0x1F) << 6) | (ord($c[1]) & 0x3F);
break;
case 3:
return ((ord($c[0]) & 0x0F) << 12) | ((ord($c[1]) & 0x3F) << 6) | (ord($c[2]) & 0x3F);
break;
case 4:
return ((ord($c[0]) & 0x07) << 18) | ((ord($c[1]) & 0x3F) << 12) | ((ord($c[2]) & 0x3F) << 6) | (ord($c[3]) & 0x3F);
break;
default:
return FALSE;
}
}
function cmp($s1, $s2)
{
$l = min($l1 = mb_strlen($s1, 'utf-8'), $l2 = mb_strlen($s2, 'utf-8'));
$s1 = preg_split('//u', mb_strtolower($s1, 'utf-8'));
$s2 = preg_split('//u', mb_strtolower($s2, 'utf-8'));
for($i = 0; $i < $l; $i++)
{
if( $s1[$i] != $s2[$i] )
return utf8_ord($s1[$i]) - utf8_ord($s2[$i]);
}
if( $l1 > $l )
{
return 1;
}
else if( $l2 > $l )
{
return -1;
}
return 0;
}
usort($array, 'cmp');
$two_forarray = $forarray;
foreach($forarray as $key=>$value) {
$forarray[$key] = strtolower($value);
}
asort($forarray);
foreach($forarray as $key=>$value) {
$forarray[$key] = $two_forarray[$key];
}
— тогда strtolower() нельзя применять.Автор оригинала: Tourmentor
Проблему решил так:
PHP:$two_forarray = $forarray; foreach($forarray as $key=>$value) { $forarray[$key] = strtolower($value); } asort($forarray); foreach($forarray as $key=>$value) { $forarray[$key] = $two_forarray[$key]; }

function cmp($s1, $s2)
{
$s1 = mb_strtolower($s1, 'utf-8');
$s2 = mb_strtolower($s2, 'utf-8');
if( $s1 < $s2 )
{
return -1;
}
else if( $s1 > $s2 )
{
return 1;
}
return 0;
}
usort($array, 'cmp');
print_r($array);