RE: Is there a way to get a variable name as a string?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> He wants a function that, if you put in $x, you get out 'x'
> 
> For *ANY* $variable.
> 
> There is no such function.


> Usually the person asking it is doing something very 
> newbie-ish, and very wrong.

Actually it's not either...

Since you can't easily debug when generating XML, as malformed XML will STB,
I have this function which dumps out an array and recursively sub arrays.

It would be very useful to dump out the name of the variable as part of
this, as a lot of text is on the screen with all the tags and such. 

It always annoyed me about print_r() that it doesn't tell you the variable
name either, so you have to always prefix it with an echo/print just above
the print_r.

/**
* Print out an array in XML form (useful for debugging)
* @access	public
* @param	string $myArray the array to output in XML format
* @version 	1.0
* @date    	07/19/05
* @todo		It would be nice if we could extract the array's variable
name and output that as an attribute
*/
function print_r_xml($myArray)
{
	print xmltag('ARRAY', null, 1);
	foreach($myArray as $k => $v)
	{
		if (is_array($v))
			print_r_xml($v);
		else
			print xmltag($k,htmlspecialchars($v));
	}
	print xmltag('ARRAY', null, 2);
}

/**
* Add the starting, or ending, or both xml tags
*
* @return	string xml formatted tags and data
* @param	string $xmltag	is the tag name to surround
* @param	mixed $data	data to output between the tags, if $data is
an array, it will be expanded as KEY=VALUE in the tag
* @param	int $tagType 1=start tag only, 2=end tag only, 3=default
* @version	1.2
* @date	06/14/05
*/
function xmltag($xmltag, $data, $tagType = 3) 
{
	// remove spaces and make uppercase
	$xmltag = str_replace(' ','_', $xmltag );
	//$xmltag = strtoupper( $xmltag );
	
	$data = str_replace('&','&', $data );	// fix data with &
	$data = str_replace('<','&lt;', $data );	// fix data with <
	$data = str_replace('>','&gt;', $data );	// fix data with >
	
	if ($tagType == 3) 
	{
		if (isset($data))
		{
			if (is_array($data))
			{
				$tmp = '<'.$xmltag;
				
				if (is_array($data))
				{
					foreach($data as $key => $value)
						$tmp .= '
'.$key.'="'.$value.'"';
				}
				
				$tmp .= " />\r\n";
				
				return $tmp;
			}
			else
				return
'<'.$xmltag.'>'.$data.'</'.$xmltag.">\r\n";
		}
		else
			return '<'.$xmltag." />\r\n";
	}
	
	if ($tagType == 1)	
	{
		$tmp = '<'.$xmltag;
		
		if (is_array($data))
		{
			foreach($data as $key => $value)
				$tmp .= ' '.$key.'="'.$value.'"';
		}
		
		$tmp .= ">\r\n";
		
		return $tmp;
	}
	
	if ($tagType == 2)	return '</'.$xmltag.">\r\n";
}

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux