カテゴリー別アーカイブ: 配列処理

PHP array_multisort

今日初めて目にした関数なので備忘録的に…

例えば, 以下の2つの関連づけられていると思われる配列を, priceの降順にarray_mulitsortすると…

<?php

$titles = ['Perfect Java', 'Perfect C#', 'Perfect JavaScript', 'Perfect PHP'];
$prices = [3456, 3888, 3200, 3600];

array_multisort($prices, SORT_DESC, SORT_NUMERIC, $titles);

var_dump($prices);  // [3888, 3600, 3456, 3200]
var_dump($titles);  // ['Perfect C#', 'Perfect PHP', 'Perfect Java', 'Perfect JavaScript']

$pricesのソートは当然として, それに関連づけたtitlesもソートされるという超便利な関数です.

さらに, これを関連づけた連想配列に対しても同じことが可能です.

<?php
$books = [
    ['title' => 'Perfect Java',           'price' => 3456],
    ['title' => 'Perfect C#',              'price' => 3888],
    ['title' => 'Perfect JavaScript', 'price' => 3200],
    ['title' => 'Perfect PHP',            'price' => 3600],
];

$prices = [3456, 3888, 3200, 3600];

array_multisort($prices, SORT_DESC, SORT_NUMERIC, $books);

var_dump($books);

以下のように, priceの降順に連想配列がソートされます.

array(4) {
  [0] =>
  array(2) {
    'title' =>
    string(10) "Perfect C#"
    'price' =>
    int(3888)
  }
  [1] =>
  array(2) {
    'title' =>
    string(11) "Perfect PHP"
    'price' =>
    int(3600)
  }
  [2] =>
  array(2) {
    'title' =>
    string(12) "Perfect Java"
    'price' =>
    int(3456)
  }
  [3] =>
  array(2) {
    'title' =>
    string(18) "Perfect JavaScript"
    'price' =>
    int(3200)
  }
}

array_multisort