ラボ > PHP:配列関連

PHP 配列のソートとキーの振り直し(sort()、rsort()、asort()、arsort()、ksort()、krsort()、array_values())

作成日:2019-07-29, 更新日:2020-06-17

基本

▼「sort()」とかで並び替えを行うと元の配列が書き換わる

$ary = array(xx, xxx, xx,);
sort($ary);
var_dump( $ary );
// ▼こんな感じで並び替えた値を変数に代入するわけではない
// $aftAry = sort($ary);
// var_dump( sort($aftAry) );

ただのソート(キーを維持しない): 昇順・sort()、降順・rsort()

元の配列 ソート後の配列
array (
  0 => 'd',
  1 => 'a',
  2 => 'b',
  3 => 'c',
)
array (
  0 => 'a',
  1 => 'b',
  2 => 'c',
  3 => 'd',
)

ただのソート(キーを維持): 昇順・asort()、降順・arsort()

元の配列 ソート後の配列
array (
  0 => 'd',
  1 => 'a',
  2 => 'b',
  3 => 'c',
)
array (
  1 => 'a',
  2 => 'b',
  3 => 'c',
  0 => 'd',
)

連想配列のソート(キーを維持): 昇順・asort()、降順・arsort()

元の配列 ソート後の配列
array (
  'd' => 'lemon',
  'a' => 'orange',
  'b' => 'banana',
  'c' => 'apple',
)
array (
  'a' => 'orange',
  'd' => 'lemon',
  'b' => 'banana',
  'c' => 'apple',
)

連想配列をキーでソート(キーを維持): 昇順・ksort()、降順・krsort()

元の配列 ソート後の配列
array (
  'd' => 'lemon',
  'a' => 'orange',
  'b' => 'banana',
  'c' => 'apple',
)
array (
  'a' => 'orange',
  'b' => 'banana',
  'c' => 'apple',
  'd' => 'lemon',
)

多次元な連想配列をキーでソート(キーを維持): 昇順・ksort()、降順・krsort()

元の配列 ソート後の配列
array (
  'd' => 
  array (
    'aa' => 'lemon',
    'bb' => 'aaa',
  ),
  'a' => 
  array (
    'aa' => 'orange',
    'bb' => 'aaa',
  ),
  'b' => 
  array (
    'aa' => 'banana',
    'bb' => 'aaa',
  ),
  'c' => 
  array (
    'aa' => 'apple',
    'bb' => 'aaa',
  ),
)
array (
  'a' => 
  array (
    'aa' => 'orange',
    'bb' => 'aaa',
  ),
  'b' => 
  array (
    'aa' => 'banana',
    'bb' => 'aaa',
  ),
  'c' => 
  array (
    'aa' => 'apple',
    'bb' => 'aaa',
  ),
  'd' => 
  array (
    'aa' => 'lemon',
    'bb' => 'aaa',
  ),
)

キーの降り直し: array_values()

元の配列 ソート後の配列
array (
  'd' => 
  array (
    'aa' => 'lemon',
    'bb' => 'aaa',
  ),
  'a' => 
  array (
    'aa' => 'orange',
    'bb' => 'aaa',
  ),
  'b' => 
  array (
    'aa' => 'banana',
    'bb' => 'aaa',
  ),
  'c' => 
  array (
    'aa' => 'apple',
    'bb' => 'aaa',
  ),
)
array (
  0 => 
  array (
    'aa' => 'lemon',
    'bb' => 'aaa',
  ),
  1 => 
  array (
    'aa' => 'orange',
    'bb' => 'aaa',
  ),
  2 => 
  array (
    'aa' => 'banana',
    'bb' => 'aaa',
  ),
  3 => 
  array (
    'aa' => 'apple',
    'bb' => 'aaa',
  ),
)

キーが数字だった場合の振り直し

「array_values()」でなく「array_merge()」を使う

$seed = array(
  3 => 'xxx'
  6 => 'xxx'
);
$fix = array_merge($seed);

関連項目

連想配列のソート(array_multisort())