phpで配列をソートする(数値の場合)

PHPのソート関数では数値が昇順降順にならないという話も多いが

第二引数に「SORT_NUMERIC」を入れるとうまく行く

arsort($point_id_array, SORT_NUMERIC);

arsort asort は値とキーの関係を保ったままソートされる

array(8) {
  [2]=>
  string(4) "80.2"
  [3]=>
  string(4) "78.3"
  [1]=>
  string(4) "77.1"
  [4]=>
  string(4) "25.4"
  [0]=>
  string(3) "6.0"
  [6]=>
  string(3) "2.6"
  [7]=>
  string(3) "0.7"
  [5]=>
  string(3) "0.5"
}

rsort sort は値とキーの関係を保たない

array(8) {
  [0]=>
  string(4) "80.2"
  [1]=>
  string(4) "78.3"
  [2]=>
  string(4) "77.1"
  [3]=>
  string(4) "25.4"
  [4]=>
  string(3) "6.0"
  [5]=>
  string(3) "2.6"
  [6]=>
  string(3) "0.7"
  [7]=>
  string(3) "0.5"
}

クラスを配列に変える

stdClass などを個別に取り出すには、配列に変えたほうが便利なこともある。

一例です。

var_dump(aaa); の結果が下記のような場合

array(26) {
  [bbb]=>
  object(stdClass)#39 (18) {
    ["topic_id"]=>
    string(2) "74"
    ["topic_title"]=>
    string(5) "Title"
    ["topic_slug"]=>
    string(7) "title-4"
    ["topic_poster"]=>
    string(1) "3"
    ["topic_poster_name"]=>
    string(9) "hashimoto"
    ["topic_last_poster"]=>
    string(1) "3"
    ["topic_last_poster_name"]=>
    string(9) "hashimoto"
    ["topic_start_time"]=>
    string(19) "2011-06-03 10:46:03"
    ["topic_time"]=>

$vvv = (array)$aaa[bbb];

var_dump($vvv); とやると、配列になっている。

配列をランダムにシャッフルする

//---------------------------------------------
// ランダム化
//---------------------------------------------
// 乱数生成
function make_seed(){
	list($usec, $sec) = explode(' ', microtime());
	return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());
$randval = rand();
// シャッフル
shuffle($array);
$i = 0;
while($array[$i] != ''){
	echo $array[$i];
	$i ++;
}