array_multisortより便利?
array_multisortがあまり理解できていないのが悪いですが、とりあえずユーザ定義関数を作った。
キーを指定して、そのキーの値を基準に並べ替えができるように。
課題は某サイトで与えられたもの。
<?php
// 自分の得意な言語で
// Let's チャレンジ!!
[$x, $y] = explode(" ", trim(fgets(STDIN)) );
$k = trim(fgets(STDIN));
$num_data = trim(fgets(STDIN));
for($i = 0; $i < $num_data; $i++ ) {
[$xi, $yi, $price] = explode(" ", trim(fgets(STDIN)));
$datas[$i]['x'] = $xi;
$datas[$i]['y'] = $yi;
$datas[$i]['price'] = $price;
$datas[$i]['distance'] = ( $x - $xi )**2 + ( $y - $yi )**2;
}
$sum = 0;
$sorted = val_sort($datas, 'distance');
for( $i = 0; $i < $k; $i++ ) {
$sum += (int)$sorted[$i]['price'];
}
$ave = $sum / $k;
echo $ave .PHP_EOL;
function val_sort($array, $key) {
// Loop through and get the values of our specified key
foreach($array as $k=>$v) {
$b[] = $v[$key];
}
asort($b); // キーと要素を維持しつつ昇順
foreach($b as $k=>$v) {
$c[] = $array[$k]; // 展開される順番にキーを取り出して元の配列のキーに指定して代入し直す
}
return $c; // 代入し直した配列を返す
}
?>
勉強になったこと
配列の展開をするときにforeachを使えるのは知っていたけど、キーも一緒に取り出して、そのキーをうまく使うと便利になるものだなということ。