アプリ版:「スタンプのみでお礼する」機能のリリースについて

$array = array(
array("address" =>"eeee@dddd.ddd","name" => "あいう"),
array("name" => "はざま","address" => "cccc@dddd.ddd"),
array("name" => "かきく","address" => "tttt@ccc.eee"),
array("name" => "さく","address" => "bbbb@dddd.ddd"),
array("name" => "あか","address" => "aaaa@dddd.ddd")
);

上記のような多次元配列があった場合
sort($array);
とすると
以下のようなデフォルトの配置が
Array
(
[0] => Array
(
[address] => eeee@dddd.ddd
[name] => あいう
)

[1] => Array
(
[name] => はざま
[address] => cccc@dddd.ddd
)

[2] => Array
(
[name] => かきく
[address] => tttt@ccc.eee
)

[3] => Array
(
[name] => さく
[address] => bbbb@dddd.ddd
)

[4] => Array
(
[name] => あか
[address] => aaaa@dddd.ddd
)

)
上記の並びが
Array
(
[0] => Array
(
[address] => eeee@dddd.ddd
[name] => あいう
)

[1] => Array
(
[name] => あか
[address] => aaaa@dddd.ddd
)

[2] => Array
(
[name] => かきく
[address] => tttt@ccc.eee
)

[3] => Array
(
[name] => さく
[address] => bbbb@dddd.ddd
)

[4] => Array
(
[name] => はざま
[address] => cccc@dddd.ddd
)

)
nameキーの値をもとにあいうえお順にならびかえられます。

がこれをnameキーではなく addressキーで並び替えたいと思ったとき、
usort($array , function($a,$b){

if($a["address"]< $b["address"]){
return -1;
}else{
return 1;
}
}
);

と上記のようのおこなうと
Array
(
[0] => Array
(
[name] => あか
[address] => aaaa@dddd.ddd
)

[1] => Array
(
[name] => さく
[address] => bbbb@dddd.ddd
)

[2] => Array
(
[name] => はざま
[address] => cccc@dddd.ddd
)

[3] => Array
(
[address] => eeee@dddd.ddd
[name] => あいう
)

[4] => Array
(
[name] => かきく
[address] => tttt@ccc.eee
)

)
とうまくaddressキーでabcdの順にソートできています。

次に

usort($array , function($a,$b){
return strcmp($a["address"],$b["address"])? -1:1;
}
);
と上記のようにstrcmp関数を使うと

Array
(
[0] => Array
(
[name] => あか
[address] => aaaa@dddd.ddd
)

[1] => Array
(
[name] => さく
[address] => bbbb@dddd.ddd
)

[2] => Array
(
[name] => かきく
[address] => tttt@ccc.eee
)

[3] => Array
(
[name] => はざま
[address] => cccc@dddd.ddd
)

[4] => Array
(
[address] => eeee@dddd.ddd
[name] => あいう
)

)
うまくソートできませんでした。

この、直接 $a, $bの大小を条件とした場合と
strcmp — バイナリセーフな文字列比較をおこなうstrcmp
とは、どのような処理の違いがあるのでしょうか?

A 回答 (1件)

foreach($array as $key => $row){


$data[$key] = $row["name"];
}

array_multisort($data,SORT_DESC,$array);

多次元配列用のソートが存在しますよ
    • good
    • 0
この回答へのお礼

おお、そんな関数が!ありがとうござます

お礼日時:2012/06/27 22:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!