<?php
function reOrderByProvider(
MyObject $actualObject,
MyObject $nextObject
) {
$weights = [
null => 100,
'gmail' => 50,
'hotmail' => 25,
];
$provider = $actualObject->getProvider();
$actualObjectWeight = array_key_exists($provider, $weights) ? $weights[$provider] : 0;
$provider = $nextObject->getProvider();
$nextObjectWeight = array_key_exists($provider, $weights) ? $weights[$provider] : 0;
return $nextObjectWeight - $actualObjectWeight;
}
class MyObject {
protected $provider;
protected $name;
function getProvider() {
return $this->provider;
}
function __construct($name, $provider = NULL) {
$this->name = $name;
$this->provider = $provider;
}
}
$items = [
new MyObject('Second', 'gmail'),
new MyObject('First'),
new MyObject('Fourth', 'provider42'),
new MyObject('Third', 'hotmail'),
new MyObject('5th', 'yaprovider'),
];
usort($items, 'reOrderByProvider');
print_r($items);
- Output for 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.4, 8.3.6 - 8.3.7
- Array
(
[0] => MyObject Object
(
[provider:protected] =>
[name:protected] => First
)
[1] => MyObject Object
(
[provider:protected] => gmail
[name:protected] => Second
)
[2] => MyObject Object
(
[provider:protected] => hotmail
[name:protected] => Third
)
[3] => MyObject Object
(
[provider:protected] => provider42
[name:protected] => Fourth
)
[4] => MyObject Object
(
[provider:protected] => yaprovider
[name:protected] => 5th
)
)
- Output for 8.3.5
- Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Array
(
[0] => MyObject Object
(
[provider:protected] =>
[name:protected] => First
)
[1] => MyObject Object
(
[provider:protected] => gmail
[name:protected] => Second
)
[2] => MyObject Object
(
[provider:protected] => hotmail
[name:protected] => Third
)
[3] => MyObject Object
(
[provider:protected] => provider42
[name:protected] => Fourth
)
[4] => MyObject Object
(
[provider:protected] => yaprovider
[name:protected] => 5th
)
)
preferences:
173.41 ms | 403 KiB | 209 Q