private function oldFetchAssoc($assoc)
{
$this->seek(0);
$row = $this->fetch();
if (!$row) {
return [];
// empty result set
}
$data = NULL;
$assoc = explode(',', $assoc);
// strip leading = and @
$leaf = '@';
// gap
$last = count($assoc) - 1;
while ($assoc[$last] === '=' || $assoc[$last] === '@') {
$leaf = $assoc[$last];
unset($assoc[$last]);
$last--;
if ($last < 0) {
$assoc[] = '#';
break;
}
}
do {
$x =& $data;
foreach ($assoc as $i => $as) {
if ($as === '#') {
// indexed-array node
$x =& $x[];
} elseif ($as === '=') {
// "record" node
if ($x === NULL) {
$x = $row->toArray();
$x =& $x[$assoc[$i + 1]];
$x = NULL;
// prepare child node
} else {
$x =& $x[$assoc[$i + 1]];
}
} elseif ($as === '@') {
// "object" node
if ($x === NULL) {
$x = clone $row;
$x =& $x->{$assoc[$i + 1]};
$x = NULL;
// prepare child node
} else {
$x =& $x->{$assoc[$i + 1]};
}
} else {
// associative-array node
$x =& $x[$row->{$as}];
}
}
if ($x === NULL) {
// build leaf
if ($leaf === '=') {
$x = $row->toArray();
} else {
$x = $row;
}
}
} while ($row = $this->fetch());
unset($x);
return $data;
}