【发布时间】:2016-07-20 08:15:28
【问题描述】:
我正在尝试比较数组的键值对以比较下一个键值对以找到较低的值。如果找到的值越低,则取消设置并继续前进。但我没有得到准确性,这里做错了什么,请提出建议。这是代码。 这是要比较和评估的数组。
Array
(
[0] => Array
(
[com_details] => Array
(
[spid] => 6
)
[distance] => 13.1 mi
)
[1] => Array
(
[com_details] => Array
(
[spid] => 6
)
[distance] => 66.2 mi
)
[2] => Array
(
[com_details] => Array
(
[spid] => 6
)
[distance] => 1.5 mi
)
[3] => Array
(
[com_details] => Array
(
[spid] => 7
)
[distance] => 188 mi
)
[4] => Array
(
[com_details] => Array
(
[spid] => 7
)
[distance] => 96.7 mi
)
[5] => Array
(
[com_details] => Array
(
[spid] => 7
)
[distance] => 3.1 mi
)
[6] => Array
(
[com_details] => Array
(
[spid] => 14
)
[distance] => 1.8 mi
)
[7] => Array
(
[com_details] => Array
(
[spid] => 14
)
[distance] => 228 mi
)
[8] => Array
(
[com_details] => Array
(
[spid] => 14
)
[distance] => 82.2 mi
)
)
在上面的数组中,我需要比较那些 spid 相同且距离不同的com_details,如果下一个或上一个距离很小,那么另一个将被取消设置并继续进行下一次迭代。但是我失败了到这个终点。
$l=0;
do{
$length = count($dispatch_locations1);
if($length >= $l+1){
if($dispatch_locations1[$l]['com_details']['spid'] == @$dispatch_locations1[$l+1]['com_details']['spid']){
if($dispatch_locations1[$l]['distance'] > $dispatch_locations1[$l+1]['distance']){
unset($dispatch_locations1[$l]);
$l--;
$dispatch_locations1 = array_values($dispatch_locations1);
} else if($dispatch_locations1[$l]['distance'] < $dispatch_locations1[$l+1]['distance']){
unset($dispatch_locations1[$l+1]);
$l--;
$dispatch_locations1 = array_values($dispatch_locations1);
} else if($dispatch_locations1[$l]['distance'] == $dispatch_locations1[$l+1]['distance']){
unset($dispatch_locations1[$l+1]);
$l--;
$dispatch_locations1 = array_values($dispatch_locations1);
}
}
}
$l++;
} while ($l <= count($dispatch_locations1)+1);
}
在完全迭代后得到这个数组有点错误。
Array
(
[0] => Array
(
[com_details] => Array
(
[spid] => 6
)
[distance] => 1.5 mi
)
[1] => Array
(
[com_details] => Array
(
[spid] => 7
)
[distance] => 188 mi
)
[2] => Array
(
[com_details] => Array
(
[spid] => 14
)
[distance] => 1.8 mi
)
)
在这个结果中,返回的第二个数组距离是 188,这是错误的。
请提出这里做错了什么。
【问题讨论】:
-
我认为您正在尝试比较字符串,而不是您需要比较浮点数.. 所以尝试在数组中有一些浮点类型的键或将距离转换为它
-
你也可以使用 usort 而不是 do while php.net/manual/en/function.usort.php
-
ok 会尝试的。你能建议如何实施 usort。
-
我正在使用我的手机,5 分钟后将参加比赛
-
让我正确地解决您的问题..您想对数组进行排序,首先按 spid,然后按距离。我说的对吗?
标签: php arrays loops while-loop