« 楽天商品検索APIサンプルを動かしてみる #2 | トップページ | インストーラ »

2007-08-10

配列の重複を取り除く PHP

Perl版の配列重複を取り除く
を書いた所、PHPでの重複除去に関するアクセスが、
検索サイトからあったようなので、
PHP版を書いてみました。
基本的な考え方は、Perl版と同じです。
配列の要素をハッシュのキーとし、
このハッシュのキーを配列に戻す。
<html>
<body>
<h1>全データ</h1>
<?
#
# 配列の初期化
#
$prefs = array (
  '千葉県',
  '東京都',
  '神奈川県',
  '埼玉県',
  '千葉県',
  '茨城県',
  '栃木県',
  '群馬県',
  '千葉県',
  '栃木県');

$unique = array ();

#
# 配列の要素をハッシュのキーとし、
# ハッシュの値に1を加算する
#
foreach ($prefs as $pref ) {
  $unique[$pref] += 1;
  print "$pref"; # 全出力
}
?>

<h1>重複データ</h1>
<?
#
# ハッシュの要素をキーと値に分ける
#
while (list($key, $value) = each($unique)) {
  # 値が1より大きい? (重複)
  if (1 < $value) {
    #ハッシュのキーと値を出力
    print "$key = $value<br>";
  }
}
?>

<h1>重複なしデータ</h1>
<?
#
# ハッシュのキーのみを配列に返す
# 配列は上書きされる
#
$prefs = array_keys($unique);
#
# 重複除去後の配列を出力
#
foreach ($prefs as $pref) {
  print "$pref<br>";
}
?>
解説はPerlと、ほぼ同じなので割愛します。
PHPでは、配列を作成するために、array()を使用します。
PHPに関する詳しい事は解りませんが、
配列オブジェクトを生成するために、
配列クラスのコンストラクタを
呼び出しているんだと思います。
それから、PHPには、ハッシュ配列に厳密な区別がないようです。
つまり、キーに配列の添字 0, 1, 2, 3 . . . と設定され、
値がそのキーの値として格納されていくようです。
つまり、以下と同じ意味のようです。
$prefs = array(
  0 => '千葉県',
  1 => '東京都',
  2 => '神奈川県' . . . );
また、ハッシュをキーと値に切り分けた場合に、
listで各変数に代入しています。
Perlでは、何もしなくてもリストを分解できるのに対して、
PHPでは明示する必要があるようです。
同じような物ですが、Perlではハッシュからキーのリストを得るのに、
keysという命令を使いましたが、PHPではarray_keysとなるようです。

|

« 楽天商品検索APIサンプルを動かしてみる #2 | トップページ | インストーラ »

PHP」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 配列の重複を取り除く PHP:

« 楽天商品検索APIサンプルを動かしてみる #2 | トップページ | インストーラ »