PHP


連想配列の検索方法の仕方に関する質問


質問が長くなりましたので、
http://webtomake.hatenablog.com/entry/2015/08/21/165038
をご覧くさい。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2015/08/28 16:55:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント100pt

こんな感じでどうでしょう。

<?php

function markup_same_route($a, $b) {
    foreach ($b as $i) {
        if (array_search($i, $a)) {
            $c[] = '' . $i . '';
        } else {
            $c[] = $i;
        }
    }

    $s = implode('|', $c);

    $n = count($b);
    while ($n > 0) {
        $s2 = preg_replace('/→(.*?)★\|★\1→/', '→\1|\1→', $s);
        if ($s == $s2) {
            break;
        } else {
            $s = $s2;
        }
        $n = $n - 1;
    }

    $c = explode('|', $s);

    return $c;
}

// test

$a = ...
$b = ...

$c = markup_same_route($a, $b);
print_r($c);

?>

ideone.com で試したのがこちらです。
http://ideone.com/6BkWBT

他4件のコメントを見る
id:webtomake

ご返答ありがとうございます。

そうですか、プログラム側では出来なそうですか....

ご回答ありがとうございます。

2015/08/26 20:01:00
id:a-kuma3

そうですか、プログラム側では出来なそうですか....

これは、牛乳先生向けのコメントですかね。

ひとつに決める必要はありませんが、いくつのバリエーションがあるかの決めは必要です。

地点の区切りは、「→」、「から」、「>」です。

は、何とかなりますが、

地点の区切りは、「→」、「から」、「>」などです。

は、とてつもなくハードルが高くなります。
「など」をプログラムに類推させるということですから、日本語を解釈させる、レベルのところまで一足飛びにハードルが高くなります。

それでも区切りが決められないということであれば、逆に地点の方を辞書引きにするという手はあります。
地点の候補に入らないものは、全て地点の区切りと考える方法です。
先に挙げた、「日暮里」と「西日暮里」のような部分重複がある場合、「西」の文字は区切りと見なせなくなります。
極端な例ですが、ひらがなの「から」が含まれる駅名があると「から」が区切りとして判別できない場合が出てくるということです。

そうですか、プログラム側では出来なそうですか....

繰り返しの引用ですが、正確に言うと「前提となる決め事があいまいなので、提示された条件の範囲では、プログラムで処理をするには難しい」ということになります。

2015/08/26 23:04:36

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません