PHP のソートの質問です。

$a = array(array(100,a,b,c),array(105,d,e,f),array(93,g,h,i),array(102,j,k,l));
という2次元配列があるとします。
これを以下のように
$a = array(array(93,g,h,i),array(100,a,b,c),array(102,j,k,l),array(105,d,e,f));
というように内枠?の中の配列のそれぞれ0番目の要素を比較して並べ替えたいのですが、どのようにしたらよいのでしょうか。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/10/15 03:41:29
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント10pt

関数 usort を使い、以下のようにしてはどうでしょう。

function mycmp($a, $b) {
    if ($a[0] == $b[0])     return 0;
    return ($a < $b) ? (-1) : (+1);
}

$a = array(array(100,a,b,c),array(105,d,e,f),array(93,g,h,i),array(102,j,k,l));
usort($a, 'mycmp');
id:AKI-NAMI

このPHPリファレンスにあるような方法しかないでしょうか。

配列内の各配列の要素[0]を抜き出して、ソートすると、連動してソートされるような、

そんな動きを既存関数のみでできるといいのですが。

2008/10/15 00:06:16
id:backupper No.2

回答回数95ベストアンサー獲得回数10

ポイント10pt

usort関数で比較関数をユーザー定義すれば可能です。

<?
function idx0($a, $b) {
  if ($a[0] == $b[0]) {
    return 0;
  }
  return ($a[0] < $b[0]) ? -1 : 1;
}
$a = array(array(100,a,b,c),array(105,d,e,f),array(93,g,h,i),array(102,j,k,l));
var_dump($a);
usort($a, 'idx0');
var_dump($a);
?></pre>

http://jp2.php.net/manual/ja/function.usort.php

id:AKI-NAMI

上の方と同じですね。

2008/10/15 00:06:43
id:GoldenDawn No.3

回答回数426ベストアンサー獲得回数81

ポイント100pt

配列は要素数が同じ場合、最初の要素から順に比較されますので、この場合は普通に sort 関数でソートできます。

(要素数が違う場合は要素数で比較される)

<?php
$a = array(array(100,a,b,c),array(105,d,e,f),array(93,g,h,i),array(102,j,k,l));
sort($a) ;
print_r($a) ;
?>

http://php.plus-server.net/language.operators.comparison.html

id:AKI-NAMI

ほんとだ! ありがとうございます!!

また1日をつぶしてしまいました。

こんなイレギュラー?内容を集めた場所はないものでしょうか。

2008/10/15 03:40:49

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません