• 締切済み

多次元配列の並び変えについて

<?php $food["a"]["1"]= "hoge1"; $food["b"]["2"]= "hoge2"; $food["c"]["3"]= "hoge3"; $food["d"]["4"]= "hoge4"; ?> 上記の配列について、1,2,3,4のキーの順番でソートしたいのですが、うまく出来ません。 一次元配列だと簡単なのですが、二次元配列だとどうやったらよいのでしょうか? array_multisortを使うと、多次元でも並び変えはできると他のサイトで読みましたが、 これは結局値でソートしてますよね? 私は純粋にキーのみでソートしたいのですが、色々調べているのですがどうも複雑なプログラムを 書かないとできないような気がしてきました。

みんなの回答

  • root139
  • ベストアンサー率60% (488/809)
回答No.1

各要素の配列(内側の配列)は要素数が1と決まっていると考えてよいでしょうか? 言い換えると ・ $food["a"]["1"] と $food["a"]["2"] が同時に存在することは無い。 ・ $food["a"] はどんな場合も要素の数が1。 が成り立つのでしょうか? もしそうであれば、 uasort を使ってソートすればよいでしょう。 例) ------------------------------------ <?php function cmp($a, $b) { $avals = array_keys($a); $bvals = array_keys($b); if ($avals[0] == $bvals[0]) return 0; return ($avals[0] < $bvals[0]) ? -1 : 1; } $food["d"]["4"]= "hoge2"; $food["c"]["3"]= "hoge4"; $food["b"]["2"]= "hoge1"; $food["a"]["1"]= "hoge3"; print_r($food); // ソート前 uasort($food, 'cmp'); print_r($food); // ソート後 ?>

参考URL:
http://www.php.net/manual/ja/function.uasort.php
cinnron
質問者

お礼

ご回答ありがとうございます。残念ながら要素数の数は1とは決まっておらずこのプログラムは使えません・・。

関連するQ&A