3

投稿 ID、タイトル、スラッグを含む、ブログのようなデータがあります。すべてがユニークです。(この質問は単純化されていますが、基本的には 3 ビットのデータがあります)

私はこのようなデータを表すかもしれません

$data = array(

1 => array('slug' => 'post1', 'title' => 'title1'),
2 => array('slug' => 'slug123', 'title' => 'a test title'),
3 => array('slug' => 'slugfoo', 'title' => 'etc'),
4 => array('slug' => 'slugbar', 'title' => 'foobar'),


)

そのデータをどのように保存し、そのデータをどのように取得する必要がありますか?

それを行うための最も基本的な方法は遅いようです:

function get_slug_from_id($id) {  //not slow
global $data;
return $data[$id]['slug'];
}

function get id_from_slug($slug) { // seems slow for big array

global $data;
foreach($data as $id => $val ) {
if ($val['slug'] == $slug) {
return $id;
}
}

}

etc ...

どのようなトリックを使用する必要がありますか?

4

1 に答える 1

0

どのようなトリックを使用する必要がありますか?

メモリを CPU と交換します - データと共にインデックスを保存します。たとえば、電話帳のインデックスと考えることができます。実際、データベースは、より複雑で最適化されていますが、ほぼそのような手法を使用しています。

ただし、次のような単純なケースにも適しています。

function build_slug_index() {
    global $slug_index, $data;

    $slug_index = array();

    foreach ($data as $id => $val) {
        $slug_index[$val['slug']] = $id;
    }
}

function get_id_from_slug_indexed($slug) {
    global $slug_index;

    return $slug_index[$slug];
}

次に、データを検索する前にインデックスを作成することを忘れないでください。

この単純な方法は、私のコンピューターでの単純な検索と比較して、ほぼ 2 倍の速度を実現します。

C:\WebDev>php search.php
W/o index - elapsed: 2.7301969528198
W/index - elapsed: 1.3415520191193
于 2012-09-16T15:44:36.653 に答える