Peter Lind wrote:
This is one example where references actually decrease memory usage.
The main reason is the recursive nature of the function. Try
<?php
echo memory_get_usage() . PHP_EOL;
$array = range(0,1000000);
$array[10] = range(0,10);
$array[20] = range(0,10);
$array[30] = range(0,10);
$array[40] = range(0,10);
$array[50] = range(0,10);
$array[60] = range(0,10);
$array[70] = range(0,10);
$array[80] = range(0,10);
$array[90] = range(0,10);
$array[100] = range(0,10);
echo memory_get_usage() . PHP_EOL;
carray($array);
function carray ($array)
{
foreach ($array as $value)
{
if (is_array($value)) carray($value);
}
echo memory_get_usage() . PHP_EOL;
echo count($array) . PHP_EOL;
}
echo memory_get_usage() . PHP_EOL;
And then compare with:
<?php
echo memory_get_usage() . PHP_EOL;
$array = range(0,1000000);
$array[10] = range(0,10);
$array[20] = range(0,10);
$array[30] = range(0,10);
$array[40] = range(0,10);
$array[50] = range(0,10);
$array[60] = range(0,10);
$array[70] = range(0,10);
$array[80] = range(0,10);
$array[90] = range(0,10);
$array[100] = range(0,10);
echo memory_get_usage() . PHP_EOL;
carray($array);
function carray (&$array)
{
$i = 0;
foreach ($array as $value)
{
if (is_array($value)) carray($value);
}
echo memory_get_usage() . PHP_EOL;
echo count($array) . PHP_EOL;
}
echo memory_get_usage() . PHP_EOL;
The memory usage spikes in the first example when you hit the second
array level - you don't see the same spike in the second example.
Regards
Peter
Doh, forgot about that :)
Cheers,
Rob.
--
http://www.interjinn.com
Application and Templating Framework for PHP
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php