100 lines
1.9 KiB
PHP
100 lines
1.9 KiB
PHP
<?php
|
|
|
|
require(__DIR__ . '/../vendor/autoload.php');
|
|
|
|
$jsonfile = __DIR__ . '/../Tests/user_agents.json';
|
|
|
|
$uas = json_decode(file_get_contents($jsonfile), true);
|
|
|
|
foreach( $uas as $key => &$val ) {
|
|
$val['key'] = $key;
|
|
}
|
|
unset($val);
|
|
|
|
uasort($uas, function ( $a, $b ) {
|
|
|
|
if( $a['platform'] === null && $b['platform'] !== null ) {
|
|
return 1;
|
|
}
|
|
if( $b['platform'] === null && $a['platform'] !== null ) {
|
|
return -1;
|
|
}
|
|
|
|
$desktop = array( 'Windows', 'Linux', 'Macintosh', 'Chrome OS' );
|
|
|
|
$ad = in_array($a['platform'], $desktop, true);
|
|
$bd = in_array($b['platform'], $desktop, true);
|
|
|
|
if( !$ad && $bd ) {
|
|
return 1;
|
|
}
|
|
|
|
if( $ad && !$bd ) {
|
|
return -1;
|
|
}
|
|
|
|
if( $ad ) {
|
|
$result = strnatcasecmp($a['browser'], $b['browser']);
|
|
if( $result == 0 ) {
|
|
|
|
$result = strnatcasecmp($a['platform'], $b['platform']);
|
|
|
|
if( $result == 0 ) {
|
|
$result = compare_version($a['version'], $b['version']);
|
|
}
|
|
}
|
|
} else {
|
|
$result = strnatcasecmp($a['platform'], $b['platform']);
|
|
if( $result == 0 ) {
|
|
|
|
$result = strnatcasecmp($a['browser'], $b['browser']);
|
|
|
|
if( $result == 0 ) {
|
|
$result = compare_version($a['version'], $b['version']);
|
|
}
|
|
}
|
|
}
|
|
|
|
if( $result == 0 ) {
|
|
$result = strnatcasecmp($a['key'], $b['key']);
|
|
}
|
|
|
|
return $result;
|
|
});
|
|
|
|
foreach( $uas as &$val ) {
|
|
unset($val['key']);
|
|
}
|
|
unset($val);
|
|
|
|
$jsonPretty = new Camspiers\JsonPretty\JsonPretty;
|
|
|
|
$json = $jsonPretty->prettify($uas) . "\n";
|
|
echo $json;
|
|
|
|
|
|
function compare_version( $a, $b ) {
|
|
$cmp_a = explode('.', $a);
|
|
$cmp_b = explode('.', $b);
|
|
|
|
$max = max(count($cmp_a), count($cmp_b));
|
|
|
|
$value = 0;
|
|
|
|
for( $i = 0; $i < $max; $i++ ) {
|
|
$aa = strtolower(isset($cmp_a[$i]) ? $cmp_a[$i] : '0');
|
|
$bb = strtolower(isset($cmp_b[$i]) ? $cmp_b[$i] : '0');
|
|
|
|
if( is_numeric($aa) && is_numeric($bb) && $aa !== $bb ) {
|
|
$value = ($aa > $bb ? 1 : -1);
|
|
break;
|
|
}
|
|
|
|
if( $cmp = strcmp($aa, $bb) ) {
|
|
$value = $cmp / abs($cmp);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return $value;
|
|
} |