3

我有来自博客的数据,包括帖子 ID、标题和 slug。都是独一无二的。(这个问题被简化了,但基本上我有三位数据)

可能会像这样表示数据

$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];
}

然后不要忘记在搜索数据之前建立索引。

与我的计算机上的普通搜索相比,这种简单的方法几乎可以提供两倍的速度:

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