Cha*_*son 63 php integer compare function
所以我们在PHP中使用了这个函数
strcmp(string $1,string $2) // returns -1,0, or 1;
Run Code Online (Sandbox Code Playgroud)
但是,我们不要有一个intcmp(); 所以我创建了一个:
function intcmp($a,$b) {
if((int)$a == (int)$b)return 0;
if((int)$a > (int)$b)return 1;
if((int)$a < (int)$b)return -1;
}
Run Code Online (Sandbox Code Playgroud)
这只是感觉很脏.你们都觉得怎么样?
这是通过传入的排序值对Javascripts进行排序的类的一部分.
class JS
{
// array('order'=>0,'path'=>'/js/somefile.js','attr'=>array());
public $javascripts = array();
...
public function __toString()
{
uasort($this->javascripts,array($this,'sortScripts'));
return $this->render();
}
private function sortScripts($a,$b)
{
if((int)$a['order'] == (int)$b['order']) return 0;
if((int)$a['order'] > (int)$b['order']) return 1;
if((int)$a['order'] < (int)$b['order']) return -1;
}
....
}
Run Code Online (Sandbox Code Playgroud)
Nic*_*not 101
使用以下内容对数据进
function sortScripts($a, $b)
{
return $a['order'] - $b['order'];
}
Run Code Online (Sandbox Code Playgroud)
如果您想要颠倒顺序,请使用$ b- $ a.
如果有问题的数字超过PHP的整数范围,return ($a < $b) ? -1 : (($a > $b) ? 1 : 0)
则更加健壮.
nic*_*ico 12
你可以用
function intcmp($a,$b)
{
return ($a-$b) ? ($a-$b)/abs($a-$b) : 0;
}
Run Code Online (Sandbox Code Playgroud)
虽然我根本没有看到使用这个功能的重点
纯粹作为一些额外的信息,已经有一个公认的RFC(https://wiki.php.net/rfc/combined-comparison-operator).
所以,比较功能将是......
<?php
$data = [...];
usort($data, function($left, $right){ return $left <=> $right; });
?>
Run Code Online (Sandbox Code Playgroud)
这里有一些非常好的功能是比较与所有其他比较完全相同.因此类型杂耍将按预期发生.
到目前为止,还没有允许对象公开比较值的魔法__forCompare()方法.当前的提议(一个不同的RFC)是在比较期间将每个对象注入到每个其他对象中,以便它进行比较 - 这对我来说似乎很奇怪 - 递归和堆栈溢出的潜在机会......!我会想到要么注入对象类型进行比较(允许对象能够根据比较的类型表示适当的值),要么盲目请求对象可以提供用于比较的值,这样会更安全解.
尚未集成到PHP-NG(目前是PHP 7),但希望很快就能实现.
为什么重新发明轮子? http://php.net/manual/en/function.strnatcmp.php
echo strnatcmp(1, 2) . PHP_EOL; // -1
echo strnatcmp(10, 2) . PHP_EOL; // 1
echo strnatcmp(10.5, 2) . PHP_EOL; // 1 - work with float numbers
echo strnatcmp(1, -2) . PHP_EOL; // 1 - work with negative numbers
Run Code Online (Sandbox Code Playgroud)
在此测试:https: //3v4l.org/pSANR
它必须是+1和-1吗?如果没有,只需返回(int) $a - (int) $b
。我不喜欢其他人推荐的划分,也没有必要检查所有三种情况。如果它不大于也不等于,则必须小于。
return (int) $a > (int) $b ? 1 : (int) $a == (int) $b ? 0 : -1;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
34414 次 |
最近记录: |