PHP の標準関数を目的別に調べることができる辞典

ホーム > PHP 標準関数逆引き辞典 > データ構造 <連想配列> > 連想配列をキーの昇順でソートする

PHP 標準関数逆引き辞典

:: reverse dictionary ::

データ構造 <連想配列>

※ソースファイルについて


連想配列をキーの昇順でソートする

連想配列をキーの昇順でソートするには、ksort 関数を使います。

$systems = array(
                  "Linux" => "リナックス"
                , "Windows" => "ウィンドウズ"
                , "FreeBSD" => "フリービーエスディー"
                , "Solaris" => "ソラリス"
           );
ksort($systems);

echo "<pre>\n";

// ソートした順序で出力
foreach ($systems as $key => $value) {
  echo "\$systems[\"".$key."\"] = \"".$value."\"\n";
}

echo "</pre>\n";

ソースファイル

≪出力≫

$systems["FreeBSD"] = "フリービーエスディー"
$systems["Linux"] = "リナックス"
$systems["Solaris"] = "ソラリス"
$systems["Windows"] = "ウィンドウズ"

▼ 関数

void ksort(array a)
void ksort(array a, int f)

連想配列 a をキーの昇順でソートします。
(キーが文字列の場合は、辞書式順序の昇順でソートします)

フラグ f は、PHP4 から利用可能です。
次の3つのフラグのいずれかを指定できます。

  1. SORT_REGULAR
  2. SORT_NUMERIC
  3. SORT_STRING

それぞれのフラグは、ソートの動作に影響します。


(1) SORT_REGULAR

このフラグは、既定のフラグです。
ソートは、フラグ f を指定しない場合と同じ結果になります。

キーが数値の場合は、そのまま数値としてソートします。
(数字文字列のキーは、連想配列に格納した時点で数値になります)

$data = array(
                  100 => "one hundred"
                , "2" => "two"
                , "200" => "two hundred"
                , 1 => "one"
                , 20 => "twenty"
                , "10" => "ten"
             );
ksort($data, SORT_REGULAR);

echo "<pre>\n";

// ソートした順序で出力
foreach ($data as $key => $value) {
  echo "\$data[".$key."] = \"".$value."\"\n";
}

echo "</pre>\n";

ソースファイル

≪出力≫

$data[1] = "one"
$data[2] = "two"
$data[10] = "ten"
$data[20] = "twenty"
$data[100] = "one hundred"
$data[200] = "two hundred"

数字以外の文字列と数値の両方が含まれる場合は、文字列が前、数値が後の順になります。

$data = array(
                  100 => "one hundred"
                , "b" => "ビー"
                , "a" => "エー"
                , 1 => "one"
                , "c" => "シー"
                , 10 => "ten"
             );
ksort($data, SORT_REGULAR);

echo "<pre>\n";

// ソートした順序で出力
foreach ($data as $key => $value) {
  if (is_string($key)) {
    $key = "\"".$key."\"";
  }

  echo "\$data[".$key."] = \"".$value."\"\n";
}

echo "</pre>\n";

ソースファイル

≪出力≫

$data["a"] = "エー"
$data["b"] = "ビー"
$data["c"] = "シー"
$data[1] = "one"
$data[10] = "ten"
$data[100] = "one hundred"

(2) SORT_NUMERIC

このフラグを指定すると、キーを数値としてソートします。

$data = array(
                  100 => "one hundred"
                , "2" => "two"
                , "200" => "two hundred"
                , 1 => "one"
                , 20 => "twenty"
                , "10" => "ten"
             );
ksort($data, SORT_NUMERIC);

echo "<pre>\n";

// ソートした順序で出力
foreach ($data as $key => $value) {
  echo "\$data[".$key."] = \"".$value."\"\n";
}

echo "</pre>\n";

ソースファイル

≪出力≫

$data[1] = "one"
$data[2] = "two"
$data[10] = "ten"
$data[20] = "twenty"
$data[100] = "one hundred"
$data[200] = "two hundred"

数字以外の文字列と数値の両方が含まれる場合は、文字列が前、数値が後の順になります。

$data = array(
                  100 => "one hundred"
                , "b" => "ビー"
                , "a" => "エー"
                , 1 => "one"
                , "c" => "シー"
                , 10 => "ten"
             );
ksort($data, SORT_NUMERIC);

echo "<pre>\n";

// ソートした順序で出力
foreach ($data as $key => $value) {
  if (is_string($key)) {
    $key = "\"".$key."\"";
  }

  echo "\$data[".$key."] = \"".$value."\"\n";
}

echo "</pre>\n";

ソースファイル

≪出力≫

$data["c"] = "シー"
$data["a"] = "エー"
$data["b"] = "ビー"
$data[1] = "one"
$data[10] = "ten"
$data[100] = "one hundred"

この場合、文字列は正常にソートされません。
キーの順序によって結果が異なります。


(3) SORT_STRING

このフラグを指定すると、キーを文字列としてソートします。

$data = array(
                  100 => "one hundred"
                , "2" => "two"
                , "200" => "two hundred"
                , 1 => "one"
                , 20 => "twenty"
                , "10" => "ten"
             );
ksort($data, SORT_STRING);

echo "<pre>\n";

// ソートした順序で出力
foreach ($data as $key => $value) {
  echo "\$data[".$key."] = \"".$value."\"\n";
}

echo "</pre>\n";

ソースファイル

≪出力≫

$data[1] = "one"
$data[10] = "ten"
$data[100] = "one hundred"
$data[2] = "two"
$data[20] = "twenty"
$data[200] = "two hundred"

数字以外の文字列と数値の両方が含まれる場合は、数値が前、文字列が後の順になります。

$data = array(
                  100 => "one hundred"
                , "b" => "ビー"
                , "a" => "エー"
                , 1 => "one"
                , "c" => "シー"
                , 10 => "ten"
             );
ksort($data, SORT_STRING);

echo "<pre>\n";

// ソートした順序で出力
foreach ($data as $key => $value) {
  if (is_string($key)) {
    $key = "\"".$key."\"";
  }

  echo "\$data[".$key."] = \"".$value."\"\n";
}

echo "</pre>\n";

ソースファイル

≪出力≫

$data[1] = "one"
$data[10] = "ten"
$data[100] = "one hundred"
$data["a"] = "エー"
$data["b"] = "ビー"
$data["c"] = "シー"
●引数

a … ソートする連想配列
f … ソートフラグ

●バージョン

PHP3 、PHP4 、PHP5

注目キーワード ベスト5

  1. セキュリティ
  2. ホスティング
  3. レンタルサーバ
  4. ファイル復旧
  5. ハードディスク修復

データ構造 <連想配列> - associative array -


ホーム > PHP 標準関数逆引き辞典 > データ構造 <連想配列> > 連想配列をキーの昇順でソートする

Copyright (C) 2005-2007 Noto Watabe. All rights reserved.
e-mail:wmh@always-pg.com