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 は、比較関数を呼び出して一度に 2 つの値 (通常は $a と $b として渡される) を渡すことでクイックソートを実行して配列を調べ、$a が $b より小さい場合は比較関数が -1 を返すことを期待します。 、$a が $b と等しい場合は 0、$a が $b より大きい場合は 1。usort の詳細については、マニュアルを参照してください。