When you have a key "0" or so in your DB, then the example don't works, because "while ($key)" will return false for 0 ...
I had good experiences with "while (strlen($key)>0)" as condition ... because when we have the last key false is returned and false evaluates to "nothing" ...
dbmnextkey
(PHP 4)
dbmnextkey —
说明
string dbmnextkey
( resource $dbm_identifier
, string $key
)
Returns the next key after key .
返回值
The next key if possible
范例
By calling dbmfirstkey() followed by successive calls to dbmnextkey() it is possible to visit every key/value pair in the dbm database. For example:
Example#1 Visiting every key/value pair in a DBM database
<?php
$key = dbmfirstkey($dbm_id);
while ($key) {
echo "$key = " . dbmfetch($dbm_id, $key) . "\n";
$key = dbmnextkey($dbm_id, $key);
}
?>
dbmnextkey
fischer at schlund dot de
20-Mar-2001 02:08
20-Mar-2001 02:08
fred at ontosys dot com
13-Oct-2000 01:41
13-Oct-2000 01:41
dbmnext() seems to lose the thread if the program deletes keys as it walks through all rows. I imagine that something similar happens with inserts. One way around this is to make two passes: one to collect the keys and one to manipulate the rows. For example:
$old_keys = array();
for ($key = dbmfirstkey($db); $key; $key = dbmnextkey($db, $key)) {
$old_keys[] = $key;
}
while (list($_, $key) = each($old_keys)) {
dbmdelete($db, $key);
}
