1

我有一个文件,每行包含int;int值。两列都是逐行升序的。我计划使用以下代码将该文件加载到数组中:

while( ! feof($f) ) {
    $line = fgets( $f, 32 );
    $tmp = explode( ";", $line );
    $elements[] = array( $tmp[0] => $tmp[1] );
}

我打算使用这个数组根据键 $tmp[0] 进行二进制搜索。数组将有 1000 个元素,但搜索将应用于 10.000 个不同的值。我应该简单地定义一个 2x1000 矩阵并将元素加载到其中吗?

谢谢

4

1 回答 1

2

您可以使用file以行数组的形式获取文件的全部内容。假设每对中的第一个 int 是唯一的,您可以将其用作数组的键:

foreach (file('ints.txt') as $line) {
  list($key, $value) = explode(';', $line);
  $elements[$key] = $value;
}

通过他们的键查找值$elements将是O(n) 但非常接近 O(1);对于您的目的,这可能足够快。

于 2010-10-30T14:34:33.967 回答