人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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番目の要素を比較して並べ替えたいのですが、どのようにしたらよいのでしょうか。

●質問者: AKI-NAMI
●カテゴリ:ウェブ制作
✍キーワード:PHP ソート 並べ替え 次元 比較
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● pahoo
●10ポイント

関数 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');
◎質問者からの返答

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

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

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


2 ● backupper
●10ポイント

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

◎質問者からの返答

上の方と同じですね。


3 ● GoldenDawn
●100ポイント

配列は要素数が同じ場合、最初の要素から順に比較されますので、この場合は普通に 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

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ