
No.3ベストアンサー
- 回答日時:
【実装例】
http://ideone.com/b1T4dS
<?php
$arrs = array(
'arr1' => array(1, 2, 3, 4, 5),
'arr2' => array(101, 102, 103, 104, 105),
'arr3' => array(3, 4, 2, 5, 1),
'arr4' => array(5, 3, 4, 2, 1),
);
foreach ($arrs as $base_name => $base_arr) {
$copies = $arrs;
unset($copies[$base_name]);
echo "【{$base_name}の他に対する類似度】\n";
$base_str = implode("\0", $base_arr);
$results = array();
foreach ($copies as $target_name => $target_arr) {
$target_str = implode("\0", $target_arr);
similar_text($base_str, $target_str, $percent);
$results[$target_name] = $percent;
}
arsort($results);
foreach ($results as $target_name => $percent) {
printf("%s -> %01.2f%%\n", $target_name, $percent);
}
echo "\n";
}
No.2
- 回答日時:
implode関数とsimilar_text関数を組み合わせれば比較的ラクに書けそうな気がします。
implode()
http://php.net/manual/ja/function.implode.php
これを使って比較する配列の要素を一度全て結合し、文字列としてください。
結合文字はカンマだと中身の文字列と被る可能性があるので、NULL文字辺りを入れとけばいいんじゃないでしょうか。
similar_text()
http://php.net/manual/ja/function.similar-text.php
類似性を3番目の参照渡しにした引数で受け取ってください。
このアルゴリズムは渡す順序によって計算結果に差が出るみたいです。
そんなに気にする必要もなさそうですが。
No.1
- 回答日時:
「似ている」の定義にもよりますが・・・
グラフにした時の形が似ている、つまり、例えば
{1,2,3,4,5}と{101,102,103,104,105}が「完璧に似ている」というのであれば、引き算した結果の配列{100,100,100,100,100}の分散を求めて、0に近い順に出力すれば良いでしょう。
数字を色に置き換えて2つ並べた時に似ているように見えるのを似ているというのであれば、
例えばレーベンシュタイン距離(編集距離)が短い順に出力する、等の方法が考えられます。
http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC% …
配列の要素が一致しているが、同順である必要がないというのであれば、一旦その中身をソートしてからレーベンシュタイン距離を測る、等の工夫が考えられます。
この回答へのお礼
お礼日時:2013/07/22 09:38
回答ありがとうございました。
>グラフにした時の形が似ている
・似ている、を考えるとき、こういうアプローチの仕方もあるのかと、驚きました
・リンク先も含め、色々参考になりましたー
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sortableで並べ替えてDBに保...
-
ファイルから指定行数分だけ読...
-
PHPのカッコ[ ]の使い方について
-
parse_ini_file関数について
-
foreachのなかで次のキーを参照...
-
配列をループでたくさん宣言し...
-
ネストが深い時のforeachはどう...
-
PHPでcsvファイルデータ内の一...
-
PHPで配列をPOSTデータで送った...
-
ファイルの逆読みってできますか?
-
【Smarty】foreach関数やsectio...
-
PHP掲示板で新着順に表示させた...
-
配列一致(要素順番は違うが内容...
-
チェックボックス複数選択 mys...
-
String だと「 ByRef引数の型が...
-
$_POSTを一括してサニタイズし...
-
プルダウンメニューにDBの内容...
-
マッチング処理(1:N)
-
配列をファイルに書き込む方法
-
pythonのファイルの並びでの読...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
String だと「 ByRef引数の型が...
-
$_SESSIONに二次元配列を使える...
-
配列をループでたくさん宣言し...
-
ネストが深い時のforeachはどう...
-
配列を回すとき、最後の要素だ...
-
file_existsでファイル名の部分...
-
PHPにてクラスを配列にすること...
-
foreachのなかで次のキーを参照...
-
postgresql関数をつかったレコ...
-
【Smarty】foreach関数やsectio...
-
漢字のソートについて
-
チェックボックス複数選択 mys...
-
Smartyについて
-
PHP掲示板で新着順に表示させた...
-
PHP 多次元配列変数のデータ受...
-
チェックボックスが複数選択で...
-
PHPのカッコ[ ]の使い方について
-
sortableで並べ替えてDBに保...
-
【PHP】配列内のある値以上をカ...
-
SQL文の実行結果を変数で受けて...
おすすめ情報