(PHP 3, PHP 4, PECL)

dbmnextkey --  Retrieves the next key from a DBM database


string dbmnextkey ( resource dbm_identifier, string key )

Returns the next key after key. By calling dbmfirstkey() followed by successive calls to dbmnextkey() it is possible to visit every key/value pair in the dbm database. For example:

例子 1. Visiting every key/value pair in a DBM database


= dbmfirstkey($dbm_id);
while (
$key) {
"$key = " . dbmfetch($dbm_id, $key) . "\n";
$key = dbmnextkey($dbm_id, $key);


add a note add a note User Contributed Notes
fischer at schlund dot de
20-Mar-2001 02:08
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" ...
fred at ontosys dot com
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);
hiongun at kt dot co dot kr
08-Oct-1999 10:52
$key = dbmnextkey($dbm_id, $key) returns
"" on the second call.
karutla at hotmail dot com
01-Oct-1999 07:14
$key = dbmfirstkey($dbm_id);
while ($key) {
   dbmreplace($dbm_id, $value);
   $key = dbmnextkey($dbm_id, $key);

doesn't seem to iterate through all the records properly.