使用 usort:
<?php
//your array
$array = array(array("x" => 10,
"y" => 10),
array("x" => 120,
"y" => 560),
array("x" => 950,
"y" => 23),
array("x" => 78,
"y" => 40),);
//define a compare function
function cmp($a,$b){
//get the squared distance of a and b
$distA_SQ = $a['x']*$a['x']+$a['y']*$a['y'];
$distB_SQ = $b['x']*$b['x']+$b['y']*$b['y'];
//if squared distances are the same, return 0
if($distA_SQ==$distB_SQ)return 0;
//distances are not the same so return 1 if a larger than b or -1 if b larger than a
return $distA_SQ>$distB_SQ?1:-1;
}
//run the sort function
usort($array, 'cmp');
//output the array
var_dump($array);
http://codepad.org/OBH1cskb
并且要确定点 A 的距离是否大于 B,您不需要计算距离。这是昂贵且不必要的。
编辑:在下面的代码和解释中添加了注释
这使用usort,它使用用户定义的比较函数。usort 将通过调用您的比较函数并一次传入两个值(通常作为 $a 和 $b 传入)来查看执行快速排序的数组,并希望您的比较函数在 $a 小于 $b 时返回 -1 , 如果 $a 等于 $b,则为 0,如果 $a 大于 $b,则为 1。您可以在手册中阅读有关 usort 的更多信息。