fixed isset_array to deal with multiple sub-indices

This commit is contained in:
Ralf Becker 2003-10-26 12:59:01 +00:00
parent 8ca325184d
commit 1713f946c9

View File

@ -187,7 +187,7 @@
} }
if ($this->name && $this->name == $this->debug) if ($this->name && $this->name == $this->debug)
{ {
echo "$this->name ".($check_col ? 'col' : 'row')."-check: c=$c, r=$r, idx='$org_idx' ==> ".($Ok?'True':'False')."<p>\n"; echo "$this->name ".($check_col ? 'col' : 'row')."-check: c=$c, r=$r, idx='$org_idx'='$idx' idx_cname='$idx_cname' ==> ".($Ok?'True':'False')."<p>\n";
} }
return $Ok; return $Ok;
} }
@ -583,16 +583,23 @@
@function isset_array @function isset_array
@syntax isset_array( $arr,$idx ) @syntax isset_array( $arr,$idx )
@author ralfbecker @author ralfbecker
@abstract checks if idx, which may contain ONE subindex is set in array @abstract checks if idx, which may contain multiple subindex (eg.'x[y][z]'), is set in array
@author ralfbecker @author ralfbecker
*/ */
function isset_array($arr,$idx) function isset_array($arr,$idx)
{ {
if (ereg('^([^[]*)\\[(.*)\\]$',$idx,$regs)) $idxs = explode('[',str_replace(']','',$idx));
$last_idx = array_pop($idxs);
$pos = &$arr;
foreach($idxs as $idx)
{ {
return $regs[2] && isset($arr[$regs[1]][$regs[2]]); if (!is_array($pos))
{
return False;
} }
return isset($arr[$idx]); $pos = &$pos[$idx];
}
return isset($pos[$last_idx]);
} }
/*! /*!
@ -611,7 +618,7 @@
} }
$idxs = explode('[',str_replace(']','',$idx)); $idxs = explode('[',str_replace(']','',$idx));
$pos = &$arr; $pos = &$arr;
while (list($n,$idx) = each($idxs)) foreach($idxs as $idx)
{ {
$pos = &$pos[$idx]; $pos = &$pos[$idx];
} }
@ -635,7 +642,7 @@
} }
$idxs = explode('[',str_replace(']','',$idx)); $idxs = explode('[',str_replace(']','',$idx));
$pos = &$arr; $pos = &$arr;
while (list($n,$idx) = each($idxs)) foreach($idxs as $idx)
{ {
if (!is_array($pos)) if (!is_array($pos))
{ {
@ -662,12 +669,13 @@
die('set_array() $arr is no array'); die('set_array() $arr is no array');
} }
$idxs = explode('[',str_replace(']','',$idx)); $idxs = explode('[',str_replace(']','',$idx));
$last_idx = array_pop($idxs);
$pos = &$arr; $pos = &$arr;
while ((list($n,$idx) = each($idxs)) && $n < count($idxs)-1) foreach($idxs as $idx)
{ {
$pos = &$pos[$idx]; $pos = &$pos[$idx];
} }
unset($pos[$idx]); unset($pos[$last_idx]);
} }
/*! /*!