今天我提供了这个question的答案,我写了一个脚本,但我发现出了问题。
这是第一个脚本
<?php
$array = array(
"0" => array (
"id" => 1204,
"custom_price" => 33.1500
),
"1" => array (
"id" => 1199,
"custom_price" => 15.83
),
"2" => array (
"id" => 1176,
"custom_price" => 16.83
)
);
usort($array, function($a, $b) {
return $a['custom_price'] - $b['custom_price'];
});
echo "<pre>";
print_r($array);
及其输出(也可以检查output on sandbox)
<pre>Array
(
[0] => Array
(
[id] => 1176
[custom_price] => 16.83
)
[1] => Array
(
[id] => 1199
[custom_price] => 15.83
)
[2] => Array
(
[id] => 1204
[custom_price] => 33.15
)
)
所以,我想要的输出应该类似于(custom_price 15.83, 16.83, 33.15000
),但实际输出是(custom_price 16.83,15.83,33.15000
)。你可以看到15.83从16.83最小。排序结果错误
因此,当我将custom_price 15.83更改为14.83时,排序输出是正确的
<pre>Array
(
[0] => Array
(
[id] => 1199
[custom_price] => 14.83
)
[1] => Array
(
[id] => 1176
[custom_price] => 16.83
)
[2] => Array
(
[id] => 1204
[custom_price] => 33.15
)
)
我无法理解发生了什么......对此有何看法?
我的问题是:我检查每次迭代但无法确定问题。当custom_price是15.83时,结果是错误的。为什么呢?
答案 0 :(得分:5)
PHP手册中有关于usort()
比较功能(http://php.net/manual/en/function.usort.php#refsect1-function.usort-parameters)的返回值的警告......
警告从比较函数返回非整数值, 比如float,会导致内部强制转换为整数 回调的回报值。因此,诸如0.99和0.1之类的值都将是 强制转换为0的整数值,这将比较这些值 相等。
同样来自PHP 7.您可以使用太空船操作符<=>
,它返回1,0,-1,具体取决于两个值的比较......
usort($array, function($a, $b) {
return $a['custom_price'] <=> $b['custom_price'];
});
echo "<pre>";
print_r($array);
答案 1 :(得分:2)
PHP manual中有一个关于
teams = Team.search(
query: {
nested: {
path: "players",
query: {
match: {"_id": "12345"} #Id of the team
},
inner_hits: {size: 3}
}
}
)
的完整示例。这是解决您问题的修改版本:
usort
答案 2 :(得分:1)
下面的代码将解决您的问题,
usort($array, function($a, $b) {
if($a['custom_price']==$b['custom_price']) return 0;
return $a['custom_price'] > $b['custom_price'] ? 1 : -1;
});
答案 3 :(得分:-1)
更新功能
usort($array, function($a, $b) {
return $a['custom_price'] > $b['custom_price'];
});