Posted: Mon Mar 28, 2005 5:39 pm
uh huh... did you notice that if $password{4} does exist, you get a notice?
This is pretty interesting though:
Personally, I'd use strlen(), as the logic will make more sense to someone who is not familiar with the code.
Code: Select all
Notice: Uninitialized string offset: 4 in /path/to/your/file.php on line 2Code: Select all
<?php
$iterations = array(1,1000000);
$test = 'this is a string of 33 characters';
$offset = 12;
function testMe($it, $offset)
{
$s1 = microtime();
for($i = 0; $i < $it; $i++)
{
$v = (strlen($test) > 35);
}
$e1 = microtime();
$s1 = explode(' ', $s1);
$e1 = explode(' ', $e1);
$s2 = microtime();
for($i = 0; $i < $it; $i++)
{
$v = ($test{$offset} != '');
}
$e2 = microtime();
$s2 = explode(' ', $s2);
$e2 = explode(' ', $e2);
echo 'function test' . "e;\n"e;;
echo number_format($it) . ' iterations.' . "e;\n"e;;
echo 'strlen($test) took ' . ($e1ї1] - $s1ї1] + $e1ї0] - $s1ї0]) . ' seconds (averaging ' . (($e1ї1] - $s1ї1] + $e1ї0] - $s1ї0]) / $it) . ' seconds per iteration)' . "e;\n"e;;
echo ' $test{' . $offset . '} took ' . ($e2ї1] - $s2ї1] + $e2ї0] - $s2ї0]) . ' seconds (averaging ' . (($e2ї1] - $s2ї1] + $e2ї0] - $s2ї0]) / $it) . ' seconds per iteration)' . "e;\n\n\n"e;;
}
foreach($iterations as $it)
{
$s1 = microtime();
for($i = 0; $i < $it; $i++)
{
$v = (strlen($test) > 35);
}
$e1 = microtime();
$s1 = explode(' ', $s1);
$e1 = explode(' ', $e1);
$s2 = microtime();
for($i = 0; $i < $it; $i++)
{
$v = ($test{$offset} != '');
}
$e2 = microtime();
$s2 = explode(' ', $s2);
$e2 = explode(' ', $e2);
echo 'inline test' . "e;\n"e;;
echo number_format($it) . ' iterations.' . "e;\n"e;;
echo 'strlen($test) took ' . ($e1ї1] - $s1ї1] + $e1ї0] - $s1ї0]) . ' seconds (averaging ' . (($e1ї1] - $s1ї1] + $e1ї0] - $s1ї0]) / $it) . ' seconds per iteration)' . "e;\n"e;;
echo ' $test{' . $offset . '} took ' . ($e2ї1] - $s2ї1] + $e2ї0] - $s2ї0]) . ' seconds (averaging ' . (($e2ї1] - $s2ї1] + $e2ї0] - $s2ї0]) / $it) . ' seconds per iteration)' . "e;\n\n\n"e;;
testMe($it, $offset);
}
?>Code: Select all
inline test
1 iterations.
strlen($test) took 3.5000000000007E-005 seconds (averaging 3.5000000000007E-005 seconds per iteration)
$test{12} took 1.6999999999934E-005 seconds (averaging 1.6999999999934E-005 seconds per iteration)
function test
1 iterations.
strlen($test) took 4.4000000000044E-005 seconds (averaging 4.4000000000044E-005 seconds per iteration)
$test{12} took 1.3999999999958E-005 seconds (averaging 1.3999999999958E-005 seconds per iteration)
inline test
1,000,000 iterations.
strlen($test) took 1.266645 seconds (averaging 1.266645E-006 seconds per iteration)
$test{12} took 1.785079 seconds (averaging 1.785079E-006 seconds per iteration)
function test
1,000,000 iterations.
strlen($test) took 2.674093 seconds (averaging 2.674093E-006 seconds per iteration)
$test{12} took 2.267316 seconds (averaging 2.267316E-006 seconds per iteration)Personally, I'd use strlen(), as the logic will make more sense to someone who is not familiar with the code.