Re: Doubt regarding an array of references... [message #177515 is a reply to message #177509] |
Wed, 04 April 2012 08:48 |
M. Strobel
Messages: 386 Registered: December 2011
Karma:
|
Senior Member |
|
|
Am 03.04.2012 14:03, schrieb Jerry Stuckle:
> On 4/3/2012 7:39 AM, M. Strobel wrote:
>>
>> My 2ยข:
>>
>> The problem with the counted for-loop is tedious writing, and off-by-one error.
>>
>
> No error if you remember what you're doing. They can be tedious, but allow more
> control over the loop. The real problem here is the indicies must be integers and
> sequential.
>
> OTOH, foreach() loops process the elements in the order they were added to the array,
> which is not necessarily numeric order, i.e.
>
> $a = array(3=>4, 2=>5, 1=>6);
> foreach ($a as $v)
> echo "$v\n";
>
> prints
> 4
> 5
> 6
>
> Whereas
> for ($i = 1; i < 4; i++)
> echo "$v\n";
>
> prints
> 6
> 4
> 5
>
>> The problem with the foreach-loop is: don't forget to use the key when you want to
>> change values!
>>
>> This works:
>>
>> #--------------------------------
>> strobel@s114-intel:~> php -a
>> Interactive shell
>>
>> php> $a = array(1,2,3);
>> php> foreach ($a as $k=>$v) { $a[$k]++; }
>> php> var_dump($a);
>> array(3) {
>> [0]=>
>> int(2)
>> [1]=>
>> int(3)
>> [2]=>
>> int(4)
>> }
>> php> foreach ($a as $k=>$v) { $a[$k]*=4; }
>> php> var_dump($a);
>> array(3) {
>> [0]=>
>> int(8)
>> [1]=>
>> int(12)
>> [2]=>
>> int(16)
>> }
>> php>
>> #--------------------------
>>
>> I see references in PHP as "a can of worms", in PHP5 they are only necessary in very
>> special cases.
>>
>> /Str.
>>
>
> References are very handy - and prevent the need for such gyrations as you're going
> through.
>
> I find this much easier to understand:
>
> $a = array(1,2,3);
> foreach ($a as &$v) {
> $v++;
> }
>
more comments:
I wondered if your version is faster. It is a little slower:
Records read: 3.917.116, in seconds: 4.1342887878418
histogram_foreach in seconds: 1.2060449123383 "foreach ($a as $k=>$v)"
histogram_arraywalk in seconds: 2.3749718666077
histogram_whileeach in seconds: 2.9545080661774
histogram_foreach_r in seconds: 1.5193150043488 "foreach ($a as &$v)"
I am careful with generalizing benchmark results, this at least shows my "plain"
version has no performance penalty.
Anyway, my advice is: optimize for clearness && cleannes of code first.
/Str.
|
|
|