回答編集履歴

1 コード修正

suyama

suyama score 4185

2017/09/21 09:24  投稿

質問に記載頂いた内容はPHPの配列定義とは異なるようです。
記載の状況について、選択ソートで実装すると下記のようになります。
```PHP
<?php
// 配列定義
$haystack = array(
  array('id' => 31, 'name' => 'test1'),
  array('id' => 29, 'name' => 'test2'),
  array('id' => 22, 'name' => 'test3'),
  array('id' => 23, 'name' => 'test4'),
  array('id' => 24, 'name' => 'test5'),
);
// 並び替え順序
$order = array(29, 31, 24, 23, 22);
for ($i = 0; $i < count($haystack); $i++) {
  // $i番目のid
  $needle = $order[$i];
  for ($j = 0; $j < count($haystack); $j++) {
  for ($j = $i; $j < count($haystack); $j++) {
     // idの値が$i番目になる値と同じかチェック
     if ($haystack[$j]['id'] == $needle) {
        // 並び替え位置が同じであればスキップ
        if ($i != $j) {
           $tmp = $haystack[$i];
           $haystack[$i] = $haystack[$j];
           $haystack[$j] = $tmp;
        }
        continue;
     }
  }
}
// 結果を出力
print_r($haystack);
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る