0

私はこの配列を持っています:

  $routes = array(
  array(
     'code' => 'PZSA',
     'name' => 'PLaza san antonio',
  ),
  array(
     'code' => 'AVAD',
     'name' => 'Av de asturias',
  ),
  array(
     'code' => 'AVAR',
     'name' => 'Av simon nieto',
  )
  );

そして、次のキーに基づいて並べ替えたい:

$target = array('AVAD', 'AVAR', 'PZSA');

したがって、ソートされた配列は次のようになります。

Array
(
[0] => Array
    (
        [code] => AVAD
        [name] => Av de asturias
    )

[1] => Array
    (
        [code] => AVAR
        [name] => Av simon nieto
    )

[2] => Array
    (
        [code] => PZSA
        [name] => PLaza san antonio
    )

)

私はこれを試してみましたが、うまくいきましたが、この単純なことにはコードが多すぎると思います. 代替案はありますか?ありがとう。

  function _sort($array, $orderArray) {
      $ordered = array();
      foreach ($orderArray as $key) {
        $ordered[] = find($key, $array);
      }
      return $ordered;
   }

   function find($code, $routes) {
      foreach ($routes as $key => $value) {
         if ($routes[$key]['code'] == $code) {
            return $routes[$key];
         }
      }
   }

$sorted = _sort($routes, $target);
4

5 に答える 5

2

ソートしたいキーを設定するだけで、どの多次元配列でも機能する、もう少し一般的なソリューションです。

//key to sort by
$sortBy = 'code';

$sorted = array();
foreach($routes as $route) {
  foreach($route as $key => $value) {
    if(!isset($sorted[$key])) {
      $sorted[$key] = array();
    }
    $sorted[$key][] = $value;
  }
}

array_multisort($sorted[$sortBy], SORT_ASC, $routes); 
print_r($routes)
于 2013-10-10T21:59:44.090 に答える